连通图

连通图

http://www.nowcoder.com/questionTerminal/569e89823a5141fe8a11ab7d4da21edf

妈妈我终于学会并查集啦!

#include<stdio.h>
int father[1005] = {0};
void init(int father[])
{
    for(int i = 0;i<1005;i++)
        father[i] = i;
    return;
}
int findfather(int n)
{
    if(father[n] == n)
        return n;
    else
        return findfather(father[n]);
}

int main()
{
    int n,m;
    int x,y;
    while(scanf("%d",&n) != EOF &&n)
    {
        scanf("%d",&m);
        init(father);
        for(int i = 0;i<m;i++)
        {
            scanf("%d%d",&x,&y);
            // 合并
            int fx = findfather(x);
            int fy = findfather(y);
            if(fx != fy)
                father[fx] = fy;
        }
        int f = findfather(1); // 以1为起点
        int flag = 1;
        for(int i = 1;i <= n;i++) // 判断是否连通
        {
            if(findfather(i) != f)
            {
                flag = 0;
                break;
            }
        }
        if(flag)
            printf("YES\n");
        else
            printf("NO\n");
    }
    return 0;
}
全部评论

相关推荐

不愿透露姓名的神秘牛友
07-10 15:58
投个小米提前批试试水,先投一个岗位看看形势,不行就再沉淀一下投第二个岗位,莫辜负
Java抽象带篮子:我嘞个骚刚,已经开始研发6g了吗
投递小米集团等公司7个岗位
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
07-11 15:08
点赞 评论 收藏
分享
斯卡蒂味的鱼汤:我认为就是逃课实习的学生技术才靠谱
点赞 评论 收藏
分享
评论
2
收藏
分享

创作者周榜

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