标签:
Time Limit: 1000MS | Memory Limit: 65536K | |
Total Submissions: 27912 | Accepted: 12734 |
Description
Input
Output
Sample Input
1 3 0 990 692 990 0 179 692 179 0
Sample Output
692
Hint
Source
题意:Flatopia岛要修路,这个岛上有n个城市,要求修完路后,各城市之间可以相互到达,且修的总
路程最短.
求所修路中的最长的路段
#include<cstdio> #include<cstring> #include<algorithm> #include<iostream> using namespace std; #define N 510 struct node{ int x,y,v; }e[N*N]; int t,fa[N]; bool cmp(const node &a,const node &b){ return a.v<b.v; } int find(int x){ return fa[x]==x?x:fa[x]=find(fa[x]); } int main(){ scanf("%d",&t); while(t--){ int n,cnt=0; scanf("%d",&n); for(int i=1;i<=n;i++) fa[i]=i; for(int i=1;i<=n;i++){ for(int j=1;j<=n;j++){ int x; scanf("%d",&x); if(x){ e[++cnt].x=i;e[cnt].y=j;e[cnt].v=x; } } } int k=0,res=0; sort(e+1,e+cnt+1,cmp); for(int i=1;i<=cnt;i++){ int fx=find(e[i].x),fy=find(e[i].y); if(fx!=fy){ fa[fy]=fx; k++; } if(k==n-1){ res=e[i].v;//因为排完序了,所以最后一个就是最大的 break; } } printf("%d\n",res); for(int i=1;i<=n;i++) fa[i]=0;//养成清零好习惯 for(int i=1;i<=n;i++) e[i]=e[0]; } return 0; }
标签:
原文地址:http://www.cnblogs.com/shenben/p/5630447.html