洛谷 #1525. 關押罪犯
阿新 • • 發佈:2018-11-23
題意
有m對關係,若2個罪犯在同一個監獄會發生c的衝突,只有2個監獄,問衝突的最大值最小化
題解
把關係按照c從大到小排序
若2個罪犯已在1個監獄,輸出,return
否則合併
除錯記錄
合併反集兩個都要操作
#include <cstdio>
#include <algorithm>
#define maxn 100005
using namespace std;
struct node{
int u, v, c;
}q[maxn];
bool cmp(const node &a, const node &b) {return a.c > b.c;}
int f[maxn];
int getf(int x){return x == f[x] ? x : f[x] = getf(f[x]);}
int n, m;
int main(){
scanf("%d%d", &n, &m);
for (int i = 1; i <= m; i++) scanf("%d%d%d", &q[i].u, &q[i].v, &q[i].c);
sort(q + 1, q + m + 1, cmp);
for (int i = 1; i <= 2 * n; i++) f[i] = i;
for (int i = 1; i <= m; i++){
if (getf(q[i].u) == getf(q[i].v)){
printf("%d\n", q[i].c); return 0;
}
f[getf(q[i].u)] = getf(q[i].v + n);
f[getf(q[i].v)] = getf(q[i].u + n);
}
printf("0\n");
return 0;
}