pooj2524 313ms 并查集

规整一点,将各个步骤写成函数,所以函数调用浪费了时间

#include
using namespace std;
//union_find
//水题,先把每人看成一个社团,然后合并一个,减一就好
int father[50005];
int ans;
void init(int n)
{
    for(int i = 1; i<=n; ++i)
        father[i] = i;
}
int find(int x)
{
    return x==father[x]?x:father[x]=find(father[x]);
}
void merge(int a,int b)
{
    int x = find(a);
    int y = find(b);
    if(x!=y)
    {
        ans--;
        father[x] = y;
    }
}
int main()
{
    int n,m;
    int k = 1;
    int a,b;
    while(~scanf("%d%d",&n,&m),n)
    {
        init(n);
        ans = n;
        for(int i = 1; i<=m; ++i)
        {
            scanf("%d%d",&a,&b);
            merge(a,b);
        }
        printf("Case %d: %d\n",k++,ans);
    }
    return 0;
}
全部评论

相关推荐

三分入剑:我觉得还是学历问题 如果你真的想要进大厂不想在小厂的话读个211得研究生吧 我感觉简历还没你好呢 我都实习了俩月了 我投了一百多份能投出20多份简历 能面试六七次 我们部门只招研究生了都 现在连9本都很难找到像样的大厂了 你又没打过rm这种 我觉得想要进步的话就考个研究生吧
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务