1930 - 关押罪犯 --- 种类并查集

// 1930 - 关押罪犯 --- 种类并查集
// 来源: 东方博宜oj  oj.czos.cn
// 补充:noip提高组复赛 并查集
#include<bits/stdc++.h>
using namespace std;
const int N=2e4+10,M=1e5+10;
int n,m;
// a和b是敌人,怨气值为c
struct node
{
    int a,b,c;
}e[M];
int f[2*N];
// 查询
int findd(int x)
{
    return x==f[x]? x:f[x]=findd(f[x]);
}
// 合并
void mergee(int x,int y)
{
    int fx=findd(x);
    int fy=findd(y);
    if(fx!=fy) f[fx]=fy;
}
// 将怨气值降序排序
bool cmp(node x1,node x2)
{
    return x1.c>x2.c;
}
int main()
{
    scanf("%d%d",&n,&m);
    for(int i=1;i<=n*2;i++) f[i]=i;   //初始化
    for(int i=1;i<=m;i++)  cin>>e[i].a>>e[i].b>>e[i].c;
    // 将怨气值降序排序,从最大的开始拆分
    sort(e+1,e+1+m,cmp);
    for(int i=1;i<=m;i++)
    {
        // 如果发现2个人已经在一座监狱,必定有冲突
        if(findd(e[i].a)==findd(e[i].b))
        {
            cout<< e[i].c;
            return 0;
        }
        else
        {
            // 将每个人和其假想的好友和合并
            mergee(e[i].b+n,e[i].a);
            mergee(e[i].a+n,e[i].b);
        }
    }
    cout<< 0;
    return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值