Run ID 作者 问题 语言 测评结果 时间 内存 代码长度 提交时间
91356 sh25_zhangyj 关押罪犯 C++ 通过 42 MS 2052 KB 1381 2026-06-12 15:35:09

Tests(10/10):


// 算法竞赛->第4章->4.1 #include <cstdio> #include <algorithm> int a[100010], b[100010], c[100010]; int ord[100010]; int enemy[20010]; int s[20010]; int height[20010]; void init() { for(int i = 1; i <= 20000; i++) { s[i] = i; height[i] = 1; } } int find(int x) { if(x != s[x]) s[x] = find(s[x]); return s[x]; } void merge(int x, int y) { x = find(x); y = find(y); if(x == y) return ; if(height[x] == height[y]) { height[x]++; s[y] = x; } else { if(height[x] < height[y]) s[x] = y; else s[y] = x; } } bool cmp(int x, int y) { return c[x] > c[y]; } int main() { init(); int N, M; scanf("%d %d", &N, &M); for(int i = 1; i <= M; i++) { scanf("%d %d %d", &a[i], &b[i], &c[i]); ord[i] = i; } std::sort(ord + 1, ord + M + 1, cmp); for(int i = 1; i <= M; i++) { if(find(a[ord[i]]) == find(b[ord[i]])) {printf("%d", c[ord[i]]); return 0;} else { if(enemy[a[ord[i]]] == 0) enemy[a[ord[i]]] = b[ord[i]]; else merge(enemy[a[ord[i]]], b[ord[i]]); if(enemy[b[ord[i]]] == 0) enemy[b[ord[i]]] = a[ord[i]]; else merge(enemy[b[ord[i]]], a[ord[i]]); } } puts("0"); return 0; }


测评信息: