WA90分救命!!有注释!!
查看原帖
WA90分救命!!有注释!!
529679
involutionKing楼主2023/3/1 20:19

第一次在网上求助,能有缘遇见好心人吗?

/*[in]
4 4
1 2 6
1 3 4
1 4 5
4 2 3 
[out]
5 
*/
#include<bits/stdc++.h>
using namespace std;
int n, m, i, j, f[100005], cnt; 
// node:存边 
struct node{
	int s, e;
	int time;
}a[100005];
bool cmp(node x, node y){
	if(x.time<y.time)
	return true;
	return false;
}
// find是找"爹"函数 
int find(int x){
	if(f[x]!=x){
		f[x] = find(f[x]);
	}
	return f[x];
}
void add(int x, int y){
	// cnt是记录还有几个村子没有连接 
	if(f[y]==y){
		cnt--;
	}
	f[y] = x;
}
int main(){
	cin>>n>>m;
	for(i=1;i<=m;i++){
		// s表示起点,e表示终点,time是时间
		// 下面的ss、ee、tt也分别表示这三个 
		cin>>a[i].s>>a[i].e>>a[i].time;
	}
	// 先按照时间排好序 
	sort(a+1, a+m+1, cmp);
	
	cnt = n;
	for(i=1;i<=n;i++){
		f[i] = i;
	}
	for(i=1;i<=m;i++){
		// 当cnt==1时说明所有村子都联通了 
		if(cnt==1){
			cout<<a[i-1].time;
			return 0;
		}
		// 获取ss、ee、tt 
		int ss = a[i].s;
		int ee = a[i].e;
		int tt = a[i].time;
		
		int r1 = find(ss);
		int r2 = find(ee);
		if(r1!=r2){
			add(r1, r2);
		}
		
	}
	
	cout<<"-1";
	return 0;
}

2023/3/1 20:19
加载中...