2323求助qwq

题目总版

附:为什么这个会输出题目中的错误样例 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


|