題意:
一道簡單的題目被說的·····,好吧!就是讓你求出連接所有村莊的最短路徑,暢通工程就有這樣的題目,貌似根本啥也,沒變啊!
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
#include<algorithm> using namespace std; struct node { int x,y; int z; }a[50000]; int pre[50000]; int find(int k) { if(k==pre[k]) return k; return pre[k]=find(pre[k]); } int cmp(node a,node b) { return a.z<b.z; } int main() { int n,m,r,t,f1,f2,ans,i,j,q; while(scanf("%d",&n)!=EOF) { q=0; for(i=1;i<=n;i++) for(j=1;j<=n;j++) { scanf("%d",&a[q].z); a[q].x=i; a[q].y=j; q++; } sort(a,a+q,cmp); for(i=1;i<=q;i++) pre[i]=i; scanf("%d",&m); for(i=1;i<=m;i++) { scanf("%d%d",&r,&t); f1=find(r); f2=find(t); if(f1!=f2) pre[f1]=f2; } ans=0; for(i=0;i<q;i++) { f1=find(a[i].x); f2=find(a[i].y); if(f1!=f2) { pre[f1]=f2; ans+=a[i].z; } } printf("%d\n",ans); } return 0; }