10分,用的是并查集,跟某哩网站上学的,不知道哪里错了
查看原帖
10分,用的是并查集,跟某哩网站上学的,不知道哪里错了
1038838
张一2010楼主2024/4/14 22:29
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
int n,m,f[40002]/*第i个的祖先*/,ans;
struct node{
	int a,b,c;
}z[100002];
bool cmp(node a,node b){
	return a.c>b.c;
}
int find(int a){
	if(a!=f[a]) f[a]=find(f[a]);
	return f[a];
}
int main(){
	scanf("%d%d",&n,&m);
	for(int i=1;i<=m;i++) scanf("%d%d%d",&z[i].a,&z[i].b,&z[i].c);
	for(int i=1;i<=n;i++) f[i]=i;/*并查集初始化*/
	sort(z+1,z+m+1,cmp);
	for(int i=1;i<=m;i++){
		int a=find(z[i].a),b=find(z[i].b);
		if(a==b){
			ans=z[i].c;
			break;
		}
		f[a]=find(z[i].b+n),f[b]=find(z[i].a+n);
		
	}
	cout<<ans;
}

最近刚学集合,有问题求大佬指出。

2024/4/14 22:29
加载中...