悬关,带权并查集求调
查看原帖
悬关,带权并查集求调
124564
Austra楼主2023/11/14 10:49
#include<bits/stdc++.h>
using namespace std;
const int MAX=1e5+5;
int n,m,x,y,fa[MAX],d[MAX];
struct sb{
	int a,b,c;
}s[MAX];
bool cmp(sb x,sb y){
	return x.c>y.c;
}
int get(int x){
	if(fa[x]==x)return x;
	int t=fa[x];
	fa[x]=get(fa[x]);
	d[x]^=d[t];
	return fa[x];
}
void merge(int x,int y){
	int p=get(x),q=get(y);
	d[p]=d[x]^d[y];
	fa[p]=q;
}
signed main(){
	//freopen("sample.in","r",stdin);
	//freopen("sample.ans","w",stdout);
	cin>>n>>m;
	for(int i=1;i<=m;i++)cin>>s[i].a>>s[i].b>>s[i].c;
	for(int i=1;i<=n;i++)fa[i]=i;
	sort(s+1,s+m+1,cmp);
	for(int i=1;i<=m;i++){
		x=get(s[i].a),y=get(s[i].b);
		if(x==y&&(d[s[i].a]^d[s[i].b])==0){
			cout<<s[i].c;
			return 0;
		}
		else if(x!=y)merge(x,y);
	}
	cout<<0;
	return 0;
}

孩子要调傻了

2023/11/14 10:49
加载中...