3个点RE,求dalao救

P1194 买礼物

已AC ```cpp #include<bits/stdc++.h> using namespace std; struct node{ int x,y,w; }a[500000]; int A[501]; int d[501]; bool cmp(node p,node q){ return p.w<q.w; } int n,m; int anc(int x){ if(A[x]==x){ return x; } else{ A[x]=anc(A[x]); return A[x]; } } void uni(int x,int y){ if(d[x]>=d[y]){ A[y]=x; d[x]=max(d[x],d[y]+1); } else{ A[x]=y; d[y]=max(d[y],d[x]+1); } } int main(){ scanf("%d%d",&n,&m); int e=0; for(int i=1;i<=m;i++){ A[i]=i; d[i]=1; } for(int i=0;i<m;i++){ for(int j=0;j<m;j++){ int b; scanf("%d",&b); if(i!=j){ if(b!=0&&b<n){ a[e].x=i; a[e].y=j; a[e].w=b; e++; a[e].x=j; a[e].y=i; a[e].w=b; e++; } else{ a[e].x=i; a[e].y=j; a[e].w=n; e++; a[e].x=j; a[e].y=i; a[e].w=n; e++; } } } } sort(a,a+e,cmp); int E=0,ans=n; for(int i=0;E<m-1;i++){ int xx=anc(a[i].x),yy=anc(a[i].y); if(xx!=yy){ uni(xx,yy); ans+=a[i].w; E++; } } printf("%d",ans); return 0; } ```
by rtyuei @ 2018-08-15 21:56:09


|