1. 程式人生 > >洛谷 #1525. 關押罪犯

洛谷 #1525. 關押罪犯

題意

有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; }