洛谷1111修復公路
阿新 • • 發佈:2018-11-09
printf print pri 能夠 ++ style space using 正整數
題目背景
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<cstdio> 2 #include<cstring> 3 #include<algorithm> 4 #include<cmath> 5 using namespace std; 6 int i,j,n,m,fa[1005],s = 0,ans = 0,u,v; 7 struct node 8 { 9 int x; 10 inty; 11 int t; 12 }a[100005]; 13 int cmp(node a,node b) 14 { 15 return a.t < b.t; 16 } 17 int find(int x) 18 { 19 if(fa[x] != x) 20 { 21 x = find(fa[x]); 22 } 23 return x; 24 } 25 int main() 26 { 27 scanf("%d %d",&n,&m); 28 for(i = 1;i <= n;i++) 29 {30 fa[i] = i; 31 } 32 for(i = 1;i <= m;i++) 33 { 34 scanf("%d %d %d",&a[i].x,&a[i].y,&a[i].t); 35 } 36 sort(a + 1,a + 1 + m,cmp); 37 for(i = 1;i <= m;i++) 38 { 39 u = find(a[i].x); 40 v = find(a[i].y); 41 if(u != v) 42 { 43 s++; 44 fa[u] = v; 45 ans = max(ans,a[i].t); 46 } 47 } 48 if(s < n - 1) 49 printf("-1"); 50 else 51 printf("%d",ans); 52 return 0; 53 }
洛谷1111修復公路