Luogu1525 关押罪犯
先排序
要知道,敌人的敌人是朋友
其实是可以证的啦
Code
#include <cstdio>
#include <algorithm>
#include <iostream>
#include <cstring>
#define ll long long
using namespace std;
const int N = 20007;
int n, m, fa[N], b[N];
struct ig{
int x, y, val;
} a[100007];
inline bool cmp(ig a, ig b){
return a.val > b.val;
}
inline int read(){
int ans = 0, f = 1;
char ch = getchar();
for(; ch < '0' || ch > '9'; ch = getchar())
if (ch == '-')
f = 0;
for(; ch >= '0' && ch <= '9'; ch = getchar())
ans = (ans << 3) + (ans << 1) + ch - 48;
return f? ans: -ans;
}
int find(int x){
if (fa[x] == x) return x;
return fa[x] = find(fa[x]);
}
int main(){
n = read(), m = read();
for (int i = 1; i <= m; ++i)
a[i].x = read(), a[i].y = read(), a[i].val = read();
sort(a + 1, a + 1 + m, cmp);
for (int i = 1; i <= n; ++i)
fa[i] = i;
for (int i = 1; i <= m; ++i){
int fx = find(a[i].x), fy = find(a[i].y);
if (fx == fy){
printf("%d\n", a[i].val);
return 0;
}
else{
if (!b[a[i].x])
b[a[i].x] = a[i].y;
else{
int fz = find(b[a[i].x]);
fa[fy] = fz;
}
if (!b[a[i].y])
b[a[i].y] = a[i].x;
else{
int fz = find(b[a[i].y]);
fa[fx] = fz;
}
}
}
printf("0\n");
return 0;
}
本来我还想yy如果有k座监狱的话可不可做
有两位神犇告诉我,
这样的话是NPC问题,
只有1和2的case是求图的色数**