有一个村子,里面有 N个房屋,已知 1号房屋已经连接到互联网了。为了让其它房屋也能连接到互联网,它们自己拉网线。 Input 第一行输入两个整数 N,M,1≤N,M≤200000,N 表示房屋数量,M表示已经拉好的网线数量。接下来有 M 行,每行两个整数 a,b,表示这两个房屋之间拉了网线。 Output 如果所有房屋都连接到了互联网,那么输出 Connected,否则,按房屋编号递增次序,输出还没有连接到互联网的编号。用c++
时间: 2023-03-24 22:04:19 浏览: 169
#include <stdio.h>
#include <stdlib.h>
#define MAXN 200005
int father[MAXN];
int find(int x) {
if (father[x] == x) return x;
return father[x] = find(father[x]);
}
void merge(int x, int y) {
int fx = find(x), fy = find(y);
if (fx != fy) father[fx] = fy;
}
int main() {
int n, m;
scanf("%d%d", &n, &m);
for (int i = 1; i <= n; i++) father[i] = i;
for (int i = 1; i <= m; i++) {
int a, b;
scanf("%d%d", &a, &b);
merge(a, b);
}
int cnt = ;
for (int i = 1; i <= n; i++) {
if (father[i] == i) cnt++;
}
if (cnt == 1) printf("Connected\n");
else {
for (int i = 1; i <= n; i++) {
if (father[i] == i) continue;
if (find(1) != find(i)) printf("%d\n", i);
}
}
return ;
}
阅读全文