附:为什么这个会输出题目中的错误样例
input:
4 2 5
1 2 6 5
1 3 3 1
2 3 9 4
2 4 6 1
output:
6
1 1
2 1
4 1
------------
在上面程序中不是选的数目达到k,选一级就结束了吗
by AFoxOfZzr @ 2019-02-21 08:41:13
大佬重构一边代码吧……
by Bean233 @ 2019-02-21 08:49:54
@[AFoxOfZzr](/space/show?uid=118086) 题面是啥啊
by ニヒル @ 2019-02-21 08:55:12
@[ニヒル](/space/show?uid=185441) P2323
by AFoxOfZzr @ 2019-02-21 09:07:36
@[WarmSnow](/space/show?uid=175149)
```cpp
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm>
#define MAXN 20002
using namespace std;
int n,m,k,ans;
int f[MAXN];
struct zzr {
int l;
int r;
int w1;
int w2;
int num;
int lv;
}zzy[MAXN];
inline int find(int x){
if(f[x]==x) return x;
while(f[x]!=x){
x=f[x];
f[x]=f[f[x]];
}
return x;
}
inline bool cmp1(zzr a,zzr b){
return a.w1<b.w1;
}
inline bool cmp2(zzr a,zzr b){
return a.w2<b.w2;
}
inline bool cmp3(zzr a,zzr b){
return a.num<b.num;
}
int main(){
scanf("%d%d%d",&n,&k,&m);
m--;
for(int i=1;i<=m;i++){
scanf("%d%d%d%d",&zzy[i].l,&zzy[i].r,&zzy[i].w1,&zzy[i].w2);
zzy[i].num=i;
}
for(int i=1;i<=n;i++) f[i]=i;
sort(zzy+1,zzy+1+m,cmp1);
for(int i=1;i<=m;i++){
int f1=find(zzy[i].l);
int f2=find(zzy[i].r);
if(f1!=f2) {
f[f1]=f2;
ans=max(ans,zzy[i].w1);
k--;
zzy[i].lv=1;
if(k==0){
k=i+1;
break;
}
}
}
sort(zzy+k,zzy+1+m,cmp2); //修改①
for(int i=k;i<=m;i++){
int f1=find(zzy[i].l);
int f2=find(zzy[i].r);
if(f1!=f2) {
f[f1]=f2;
ans=max(ans,zzy[i].w2);
zzy[i].lv=2;}
}
sort(zzy+1,zzy+1+m,cmp3);
for(int i=1;i<=m;i++)
if(zzy[i].lv!=0) {
printf("%d %d\n",zzy[i].num,zzy[i].lv);
}
return 0;
}
```
```c
```
```java
```
```cpp
```
by AFoxOfZzr @ 2019-02-21 09:12:58
@[WarmSnow](/space/show?uid=175149)
QAQ这个为什么不可以
by AFoxOfZzr @ 2019-02-21 09:13:28