60分,请问思路有问题吗?
查看原帖
60分,请问思路有问题吗?
918894
XyGetItRightAker楼主2024/3/25 21:38

思路:按c的值从大到小遍历关系,将一对关系的俩个加入到同一集合中,如果出现当前遍历的俩个集合相同,直接输出当前的c,return,否则直到遍历完,输出0。

#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
int n,m;
const int N=2e5+10;
int tr[N];
struct node{
	int x,y,c;
}a[N];
bool cmp(node b,node d){
	return b.c>d.c;
}
int find(int x){
	if(x==tr[x])return x;
	return tr[x]=find(tr[x]);
}
int main(){
	cin>>n>>m;
	for(int i=1;i<=n;i++)tr[i]=i;
	for(int i=1;i<=m;i++){
		cin>>a[i].x>>a[i].y>>a[i].c;
	}
	sort(a+1,a+1+m,cmp);
	for(int i=1;i<=m;i++){
		int x=a[i].x,y=a[i].y,c=a[i].c;
		x=find(x);
		y=find(y);
		if(a[i].x==a[i].y)continue;
		if(x==y){
			cout<<c<<endl;return 0;
		}
		else{
			tr[x]=y;
		}
	}
	cout<<0<<endl;
	return 0;
}
2024/3/25 21:38
加载中...