#2019120500017-LG 修复公路

(P1111) 并查集 修复公路

#include <cstdio>
#include <cmath>
#include <cstring>
#include <algorithm>

using namespace std;
const int N=1e6+5;
int dzx[N],siz[N];
int find (int x){
	if(dzx[x]==x) return x;
	else return dzx[x]=find(dzx[x]);
}
struct name{
	int x,y,t;
}a[N];

bool cmp(name s,name t){
	return s.t<t.t;//?
}
int n,m;

int main( ){
	scanf("%d%d",&n,&m);
	//int x,y,t;
	for(int i=1;i<=m;i++){
		scanf("%d%d%d",&a[i].x,&a[i].y,&a[i].t);
	}
	for(int i=1;i<=n;i++) dzx[i]=i,siz[i]=1;
	sort(a+1,a+m+1,cmp);
	for(int i=1;i<=m;i++){
		if(find(a[i].x)==find(a[i].y)) continue;
		int q=dzx[a[i].x],w=dzx[a[i].y];
		if(siz[q]<siz[w]) dzx[q]=w,siz[w]+=siz[q];
		else dzx[w]=q,siz[q]+=siz[w];
		if(siz[find(1)]==n){
			printf("%d",a[i].t);
			return 0;
		}
		
	}
	puts("-1");
	return 0;
}
要做就做南波万
原文地址:https://www.cnblogs.com/liuziwen0224/p/11992465.html