图中的环

  1. 想要只有一个环,必须满足边数 \(m\) 等于点数 \(n\)。(可以看做一个环上接了一些树)
  2. 是否连通可以用并查集判断。
#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;
}
posted @ 2022-01-29 21:26  福宝j  阅读(18)  评论(0编辑  收藏  举报