题目背景
A地区在地震过后,连接所有村庄的公路都造成了损坏而无法通车。政府派人修复这些公路。
题目描述
给出A地区的村庄数N,和公路数M,公路是双向的。并告诉你每条公路的连着哪两个村庄,并告诉你什么时候能修完这条公路。问最早什么时候任意两个村庄能够通车,即最早什么时候任意两条村庄都存在至少一条修复完成的道路(可以由多条公路连成一条道路)
输入输出格式
下面M行,每行3个正整数x, y, t,告诉你这条公路连着x,y两个村庄,在时间t时能修复完成这条公路。
输入输出样例
N<=1000,M<=
x<=N,y<=N,t<=
#include
#include
#include
using namespace std; const int maxM = (int)1e5; const int maxN = 1000; struct edge { int u, v, t; }G[maxM]; int operator <(edge x, edge y) { return x.t < y.t; } int pre[maxN + 1]; void getPre(int u) { if(pre[u] == u) return; getPre(pre[u]); pre[u] = pre[pre[u]]; } int main() { ios::sync_with_stdio(false); int n, m; cin >> n >> m; for(int i = 1; i <= n; i ++) pre[i] = i; for(int i = 0; i < m; i ++) cin >> G[i].u >> G[i].v >> G[i].t; int cnt = n; sort(G, G + m); for(int i = 0; i < m; i ++) { int u = G[i].u, v = G[i].v; getPre(u); getPre(v); if(pre[u] != pre[v]) { pre[pre[v]] = pre[u]; if(-- cnt == 1) { printf("%d", G[i].t); return 0; } } } printf("-1"); }
发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/225498.html原文链接:https://javaforall.net
