關押罪犯—種類並查集
阿新 • • 發佈:2022-04-11
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; } /* 首先先排序,兩個怨氣大的不能在同一個集合裡面 如果在了,那就是被看見的第一個,其實下面就可以不用判斷了*/