1. 程式人生 > >洛谷 P1111 修復公路

洛谷 P1111 修復公路

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     int
u,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 return
f[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 修復公路