题解 | #连通图#
连通图
https://www.nowcoder.com/practice/569e89823a5141fe8a11ab7d4da21edf
#include <iostream>
using namespace std;
const int N = 100010;
int father[N];
int height[N];
void initial(int n) {
for (int i = 1; i <= n; i++) {
father[i] = i;
height[i] = 0;
}
return;
}
int find(int n) {
if (father[n] != n) father[n] = find(father[n]);
return father[n];
}
void Union(int a, int b) {
a = find(a);
b = find(b);
if (a != b) {
if (height[a] < height[b]) father[a] = b;
else if (height[a] > height[b]) father[b] = a;
else {
father[a] = b;
height[b]++;
}
}
}
int main() {
int n, m;
while (cin >> n >> m) {
if (n == 0) break;
initial(n);
while (m--) {
int a, b;
cin >> a >> b;
Union(a, b);
}
int ans = 0;
for (int i = 1; i <= n; i++) {
if (find(i) == i) ans++;
}
if(ans==1) cout<<"YES"<<endl;
else cout<<"NO"<<endl;
}
}
// 64 位输出请用 printf("%lld")
百融云创公司氛围 9人发布