#include <iostream>#include<cstdio>#include<cstring>#include<queue>#definePA pair<int,int>using namespacestd;intn,num,dis[101],ans,f[101],head[101];structnode{intU,v,pre,dis;} e[ the* the];voidADD (int from,intTo,intdis) {num++; E[num].dis=dis; E[NUM].U= from; E[NUM].V=to ; E[num].pre=head[ from]; head[ from]=num;}voidPrim () {priority_queue<pa,vector<pa>,greater<pa> >Q; dis[1]=0; Q.push (Make_pair (0,1)); while(!Q.empty ()) { intk=Q.top (). Second; Q.pop (); if(F[k])Continue; F[K]=1; Ans+=Dis[k]; for(intI=head[k];i;i=e[i].pre)if(dis[e[i].v]>E[i].dis) {DIS[E[I].V]=E[i].dis; Q.push (Make_pair (E[I].DIS,E[I].V)); } }}intMain () {scanf ("%d",&N); Num=0; intx; memset (DIS,127/3,sizeof(DIS)); Memset (F,0,sizeof(f)); memset (Head,0,sizeof(head)); for(intI=1; i<=n;i++) for(intj=1; j<=n;j++) {scanf ("%d",&x); if(i!=j) ADD (I,J,X); } ans=0; Prim (); printf ("%d\n", ans); return 0;}
#include <iostream>#include<cstdio>#include<cstring>#include<algorithm>#definell Long Long#defineMAXN 100010using namespacestd;intn,m,fa[maxn],deep[maxn];ll ans;structnode{intU,v,dis;} E[MAXN];intinit () {intx=0;CharSBOOLf=0; s=GetChar (); while(s<'0'|| S>'9'){if(s=='-') f=1; s=GetChar ();} while(s>='0'&&s<='9') {x=x*Ten+s-'0'; s=GetChar ();} if(f)return-X;returnx;}intcmpConstNode &x,ConstNode &y) { returnx.dis<Y.dis;}intFindintx) { if(X!=fa[x]) fa[x]=find (fa[x]); returnfa[x];}voidUnionn (intXinty) { if(deep[x]<Deep[y]) swap (x, y); Fa[y]=x;deep[x]+=deep[y];d eep[y]=0;}intMain () {n=init (); m=init (); intx, Y, Z for(intI=1; i<=n;i++) fa[i]=i; for(intI=1; i<=m;i++) {x=init (); Y=init (); z=init (); E[I].U=x;e[i].v=y;e[i].dis=Z; } sort (E+1, e+1+m,cmp); for(intI=1; i<=m;i++) { intr1=find (E[I].U); intR2=find (E[I].V); if(R1==R2)Continue; Ans+=E[i].dis; Unionn (R1,R2); } printf ("%lld\n", ans); return 0;}
Prim heap optimization + Kruskal optimization by rank