求助后面几个n大的点调试到sort函数时sort爆了。。。。。

P1194 买礼物

@[EKKO2年专注玩家](/space/show?uid=121533) 帮你改过了。 ```cpp #include<bits/stdc++.h> using std::cin; using std::cout; using std::endl; struct Edge{ int from,to,w,num; Edge() {} Edge(int _f,int _t,int _w,int _n):from(_f),to(_t),w(_w),num(_n){} }e[250001]; int a,b,num2=0,family[501],ans=0,x; bool cmp(Edge x,Edge y) { if(x.w>=y.w) return false; else return true; } int find(int x) { if(family[x]!=x) family[x]=find(family[x]); return family[x]; } void unionset(int x,int y) { x=find(x); y=find(y); if(x==y) return; else family[x]=y; } int main() { cin>>a>>b; for(int i=1;i<=b;i++) family[i]=i; for(int i=1;i<=b;i++) { num2++; e[num2]=Edge(0,i,a,num2); } ans=0; for(int i=1;i<=b;i++) for(int j=1;j<=b;j++) { cin>>x; if(i!=j) { if(x==0) x=a; num2++; e[num2]=Edge(i,j,x,num2); } } std::sort(e+1,e+num2+1,cmp); for(int i=1;i<=num2;i++) { if(find(e[i].from)!=find(e[i].to)) { unionset(e[i].from,e[i].to); ans+=e[i].w; } } cout<<ans; return 0; } ```
by Smile_Cindy @ 2019-05-18 17:14:45


@[Alpha](/space/show?uid=87058) 谢谢大佬 太神奇了
by EkkoXy @ 2019-05-20 13:41:02


|