1. 程式人生 > 其它 >關押罪犯—種類並查集

關押罪犯—種類並查集

Problem Detail - 關押罪犯 - 追夢演算法網

題意就是給你一群罪犯,怨氣大的不能在同一個(其實也可以),反正看在同一個集合裡面的怨氣的最大值

#include<iostream>
#include<algorithm>
using namespace std;
const int N=200020;
int p[N];
struct mess{
    int x,y;
    int s;
}a[N];
bool cmp(mess x,mess y)
{
    return x.s>y.s;
}
int find(int x)
{
    if(p[x]!=x) p[x]=find(p[x]);
    
return p[x]; } void merge(int x,int y) { int xx=find(x); int yy=find(y); if(xx!=yy) p[xx]=yy; } int main(){ int n,m; cin>>n>>m; for(int i=1;i<=2*n;i++) p[i]=i; for(int i=1;i<=m;i++) cin>>a[i].x>>a[i].y>>a[i].s; sort(a+1,a+m+1,cmp);
for(int i=1;i<=m;i++) { if(find(a[i].x)==find(a[i].y)) { cout<<a[i].s; return 0; } merge(a[i].x+n,a[i].y); merge(a[i].x,a[i].y+n); } cout<<"0"; return 0; } /* 首先先排序,兩個怨氣大的不能在同一個集合裡面 如果在了,那就是被看見的第一個,其實下面就可以不用判斷了
*/