社区讨论
样例不过+WA0分,玄关求条,码风良好
P1525[NOIP 2010 提高组] 关押罪犯参与者 3已保存回复 11
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 11 条
- 当前快照
- 1 份
- 快照标识符
- @mhjs5z65
- 此快照首次捕获于
- 2025/11/04 07:37 4 个月前
- 此快照最后确认于
- 2025/11/04 10:23 4 个月前
求大佬解答,蒟蒻代码:
C#include <bits/stdc++.h>
using namespace std;
int n, m, a[100005], b[100005], c[100005], l = INT_MAX, r = -1, fa[20005];
int Find(int root) {
if(fa[root]==root) return root;
return fa[root] = Find(fa[root]);
}
void merge(int x, int y) {
int fx = Find(x), fy = Find(y);
if(fx!=fy) fa[fy] = fx;
}
bool check(int x) {
for(int i=1; i<=n; i++) fa[i] = i;
for(int i=1; i<=m; i++)
if(c[i]<=x) merge(a[i], b[i]);
int cnt = 0;
for(int i=1; i<=n; i++)
if(fa[i]==i) cnt ++;
return cnt<=2;
}
int main() {
scanf("%d %d", &n, &m);
if(m==0) {
printf("0");
return 0;
}
for(int i=1; i<=m; i++) {
scanf("%d %d %d", &a[i], &b[i], &c[i]);
l = min(l, c[i]), r = max(r, c[i]);
}
while(l<=r) {
int mid = l+r>>1;
if(check(mid)) r = mid-1;
else l = mid+1;
}
printf("%d", l);
return 0;
}
回复
共 11 条回复,欢迎继续交流。
正在加载回复...