题解 | #连通图#并查集模板题,记住就行。

连通图

https://www.nowcoder.com/practice/569e89823a5141fe8a11ab7d4da21edf

#include <stdio.h>
int parents[1001];
int find(int x) {
    return x == parents[x] ? x : (parents[x] = find(parents[x]));
}
int main() {
    int n, m;
    Label:
    while (scanf("%d%d", &n, &m) != EOF) {
        if (n == 0 && m == 0) break;
        for (int i = 1; i <= n; i++) parents[i] = i;
        while (m--) {
            int x, y;
            scanf("%d%d", &x, &y);
            x = find(x), y = find(y);
            if (x != y) parents[x] = y;
        }
        int parent = find(1);
        for (int i = 2; i <= n; i++) {
            if (find(i) != parent) {
                printf("NO\n");
                goto Label;
            }
            parents[i] = parent;
        }
        printf("YES\n");
    }
    return 0;
}

全部评论

相关推荐

牛仔知道哦:你是我见过最美的牛客女孩
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务