洛谷 P1111 修復公路
阿新 • • 發佈:2017-05-17
inline 輸出 blog 所有 成了 cmp code 政府 i++
題目背景
A地區在地震過後,連接所有村莊的公路都造成了損壞而無法通車。政府派人修復這些公路。
題目描述
給出A地區的村莊數N,和公路數M,公路是雙向的。並告訴你每條公路的連著哪兩個村莊,並告訴你什麽時候能修完這條公路。問最早什麽時候任意兩個村莊能夠通車,即最早什麽時候任意兩條村莊都存在至少一條修復完成的道路(可以由多條公路連成一條道路)
輸入輸出格式
輸入格式:第1行兩個正整數N,M
下面M行,每行3個正整數x, y, t,告訴你這條公路連著x,y兩個村莊,在時間t時能修復完成這條公路。
輸出格式:如果全部公路修復完畢仍然存在兩個村莊無法通車,則輸出-1,否則輸出最早什麽時候任意兩個村莊能夠通車。
輸入輸出樣例
輸入樣例#1:4 4 1 2 6 1 3 4 1 4 5 4 2 3輸出樣例#1:
5
說明
N<=1000,M<=100000
x<=N,y<=N,t<=100000
1 #include<iostream> 2 #include<cstdio> 3 #include<algorithm> 4 5 using namespace std; 6 const int N=1010; 7 8 int f[N]; 9 int now; 10 int ans[N]; 11 12 struct node{ 13 intu,v,w; 14 }E[N*100]; 15 16 inline void read(int &x) 17 { 18 char c=getchar(); 19 x=0; 20 while(c<‘0‘||c>‘9‘)c=getchar(); 21 while(c>=‘0‘&&c<=‘9‘)x=x*10+c-‘0‘,c=getchar(); 22 } 23 24 inline int find(int x) 25 { 26 if(f[x]!=x) 27 f[x]=find(f[x]); 28 returnf[x]; 29 } 30 31 inline void un(int x,int y) 32 { 33 f[find(x)]=find(y); 34 } 35 36 inline bool cmp(node a,node b) 37 { 38 return a.w<b.w; 39 } 40 41 int main() 42 { 43 int n,m; 44 read(n);read(m); 45 for(int i=1;i<=n;i++) 46 f[i]=i; 47 for(int i=1;i<=m;i++) 48 { 49 read(E[i].u); 50 read(E[i].v); 51 read(E[i].w); 52 } 53 sort(E+1,E+m+1,cmp); 54 55 int tot=0; 56 for(int i=1;i<=m;i++) 57 { 58 if(find(E[i].u)!=find(E[i].v)) 59 { 60 un(E[i].u,E[i].v); 61 tot++; 62 ans[tot]=E[i].w; 63 } 64 if(tot==n-1)break; 65 } 66 if(tot!=n-1)printf("-1"); 67 else 68 { 69 sort(ans+1,ans+tot+1); 70 printf("%d",ans[tot]); 71 } 72 return 0; 73 }
洛谷 P1111 修復公路