wrong,求找错

P3366 【模板】最小生成树

```cpp #include<cstdio> int n,m,k=0,ans=0; int a[200000][4]; int f[200000]; void kp(int l,int r) { int i=l,j=r,mid=a[(i+j)/2][3]; while(i<=j) { while(a[i][3]<mid) i++; while(a[j][3]>mid) j--; if(i<=j) { int t; t=a[i][1];a[i][1]=a[j][1];a[j][1]=t; t=a[i][2];a[i][2]=a[j][2];a[j][2]=t; t=a[i][3];a[i][3]=a[j][3];a[j][3]=t; i++; j--; } } if(l<j) kp(l,j); if(i<r) kp(i,r); } int find(int x) { if(f[x]==x) return x; else return f[x]=find(f[x]); return f[x]; } void go(int x,int y) { int t1=find(x),t2=find(y); if(t1!=t2) f[t2]=t1; } int main() { scanf("%d %d",&n,&m); for(int i=1;i<=m;i++) { scanf("%d %d %d",&a[i][1],&a[i][2],&a[i][3]); f[i]=i; } kp(1,m); for(int i=1;i<=m;i++) { if(find(a[i][1])!=find(a[i][2])) { go(a[i][1],a[i][2]); ans=ans+a[i][3]; k++; } if(k==n-1) { printf("%d",ans); return 0; } } printf("orz"); } ```
by Mark_ZZY @ 2017-03-25 10:16:01


|