题解 | #第一题# 简便的并查集做法

第一题

https://www.nowcoder.com/practice/7c29cdfa28274c86afc9e88c07448a10

#include <iostream>
using namespace std;

const int N = 1000100;

int p[N];
int e[N];
bool st[N];

int find(int x)
{
    if(x != p[x]) p[x] = find(p[x]);
    return p[x];
}

int main() {
    for(int i = 0; i < N; i++) p[i] = i;

    int a, b;
    int res = 0, j = 0;
    while(cin >> a >> b)
    {
        p[find(a)] = find(b);
        e[j++] = a;
        e[j++] = b;
    }

    for(int i = 0; e[i] != 0; i++) 
        if(!st[e[i]] && find(e[i]) == e[i]) 
        {
            st[e[i]] = true;
            res++;
        }
            
    cout << res << endl;
}

全部评论

相关推荐

不愿透露姓名的神秘牛友
11-21 19:05
面试官_我太想进步了:混学生会的,难怪简历这么水
点赞 评论 收藏
分享
请看图片
投递叮咚买菜等公司10个岗位 >
点赞 评论 收藏
分享
joe2333:怀念以前大家拿华为当保底的日子
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务