"Algorithm" minimum spanning tree (classic modeling)
"Http://blog.csdn.net/wbysr/article/details/17793121"
#include <cstdio>#include<algorithm>using namespacestd;Const intmaxn=310, maxm=100000, s=305;intFIRST[MAXN],N,TOT,FA[MAXN];structedges{int from, U,v,p;} E[MAXM];voidInsertintUintVintp) {Tot++;e[tot].u=u;e[tot].v=v;e[tot].p=p;e[tot]. from=first[u];first[u]=tot;}BOOLcmp (edges a,edges b) {returna.p<B.P;}intGETFA (intx) {returnfa[x]==x?x:fa[x]=GETFA (fa[x]);}intMain () {scanf ("%d",&N); intRd; for(intI=1; i<=n;i++) {scanf ("%d",&Rd); Insert (S,I,RD); Insert (I,S,RD); } for(intI=1; i<=n;i++) { for(intj=1; j<=n;j++) {scanf ("%d",&Rd); if(i!=j) Insert (I,J,RD); }} sort (e+1, e+tot+1, CMP); for(intI=1; i<=n;i++) fa[i]=i;fa[s]=s; intans=0, cnt=0; for(intI=1; i<=tot;i++) if(GETFA (e[i].u)! =GETFA (E[I].V)) {//printf ("u=%d v=%d\n", e[i].u,e[i].v);fa[fa[e[i].u]]=FA[E[I].V]; Ans+=e[i].p;cnt++; if(cnt==n) Break; } printf ("%d", ans); return 0;}
View Code
"Bzoj" 1601 [Usaco2008 Oct] Irrigation