P1525 [NOIP2010 提高组] 关押罪犯

题目

题目

思路

并查集扩展域水题。
考虑敌人域与朋友域,这里的敌人具有传递性,同时题目要求输出最大一组,所以按从大到小排序然后按要求合并即可(如果2人已经在同一集合中,可以输出,然后exit(0))
code:

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<queue>
#include<cstring>
using namespace std;
int n,m;
int fa[20001];
struct f{
    
    
	int x,y,w;
} u[100010];
bool cmp(f a,f b)
{
    
    
	return a.w>b.w;
}
int find(int x)
{
    
    
	if (fa[x]==x) return x;
	else return fa[x]=find(fa[x]);
}
int main()
{
    
    
	cin>>n>>m;
	for (int i=1;i<=2*n;i++) fa[i]=i;
	for (int i=1;i<=m;i++) cin>>u[i].x>>u[i].y>>u[i].w;
	sort(u+1,u+1+m,cmp);
	for (int i=1;i<=m;i++)
	{
    
    
		if (find(u[i].x)==find(u[i].y))
		{
    
    
			cout<<u[i].w;
			return 0;
		}
		fa[find(u[i].x)]=find(n+u[i].y);
		fa[find(u[i].y)]=find(n+u[i].x);
	}
	cout<<0;
    return 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_49843717/article/details/115144129