- 想要只有一个环,必须满足边数 \(m\) 等于点数 \(n\)。(可以看做一个环上接了一些树)
- 是否连通可以用并查集判断。
#include <iostream>
#include <cstdio>
using namespace std;
int n, m, a, b, cnt;
int f[110];
int find(int x) {
if(f[x] != x) return f[x] = find(f[x]);
return f[x];
}
int main () {
scanf("%d%d", &n, &m);
if(n != m) {printf("NO");return 0;}
cnt = n;
for (int i = 1; i <= n; i ++ ) f[i] = i;
for (int i = 1; i <= m; i ++ ) {
scanf("%d%d", &a, &b);
int fa = find(a), fb = find(b);
if(find(a) != find(b)) {
cnt --;
f[fa] = fb;
}
}
if(cnt == 1) printf("YES");
else printf("NO");
return 0;
}