zoukankan      html  css  js  c++  java
  • HDU(3560)成环,并查集

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3560

    并查集查有几个块,修改了之前我的一个方法(用什么map),直接判断根节点的id是i的个数。

    然后成环的判断就是一个筛选,先筛选一个每个节点的度是不是2,要不是的话直接排除(根节点),在查块的时候,进一步查看这个根节点是不是被排除了。

    so easy;

    #include <stdio.h>
    #include <string.h>
    
    int father[100010];
    int degree[100010];
    bool vis[100010];
    
    int Find_Set(int x)
    {
        if(x!=father[x])
            father[x] = Find_Set(father[x]);
        return father[x];
    }
    
    int main()
    {
        int n,m;
        while(scanf("%d%d",&n,&m),n+m)
        {
            memset(vis,true,sizeof(vis));
            memset(degree,0,sizeof(degree));
    
            for(int i=0;i<n;i++)
                father[i] = i;
    
            for(int i=0;i<m;i++)
            {
                int x,y;
                scanf("%d%d",&x,&y);
                degree[x]++;
                degree[y]++;
    
                int fx,fy;
                fx = Find_Set(x);
                fy = Find_Set(y);
                if(fx!=fy)
                {
                    father[fy] = fx;
                }
            }
    
            for(int i=0;i<n;i++)
            {
                if(degree[i]!=2)
                    vis[Find_Set(i)] = false;
            }
            int s = 0;
            int h = 0;
            for(int i=0;i<n;i++)
            {
                if(Find_Set(i)==i)
                {
                    s++;
                    if(vis[i])
                        h++;
                }
            }
    
            printf("%d %d
    ",s,h);
        }
    
    
        return 0;
    }
  • 相关阅读:
    企业级应用和互联网应用的区别
    JAVAEE课程目标
    组队项目--投票管理系统
    关于JSON
    Ajax技术学习
    Applet的学习
    Async的相关学习
    Filter分析
    JavaEE-map
    Session
  • 原文地址:https://www.cnblogs.com/TreeDream/p/5721671.html
Copyright © 2011-2022 走看看