• HDU 1325 Is It A Tree?


    题解:首先,是一棵树的话要满足的条件是

    1  不成环;
    2  除了根,所有的入度为1,根入度为0;
    3  只有一棵树,不是森林

    那么,用并查集记录父亲,如果矛盾就成环,而最后找到一个节点的父亲,如果其余的不是则为森林,而入度则在开始时记一下,最后发现如果有入度大于1的则也不行。

    #include <cstdio>  
    #include <iostream> 
    using namespace std;  
    const int MAXN=100010;  
    int f[MAXN],flag,hash[MAXN],in[MAXN];  
    void init(){  
        flag=1;    
        for(int i=1;i<MAXN;i++){f[i]=i;in[i]=0;hash[i]=0;}   
    }   
    int sf(int x){  
        if(x!=f[x])f[x]=sf(f[x]);  
        return f[x];  
    }  
    int main(){  
        int cnt=1,root,x,y;  
        init();  
        while(scanf("%d%d",&x,&y)){  
            if(x<0&&y<0)break;  
            if(x==0&&y==0){  
                if(flag){  
                    for(int i=1;i<MAXN;i++){if(hash[i]){root=sf(i);break;}}  
                    for(int i=1;i<MAXN;i++){  
                        if(in[i]>1){flag=0;break;}  
                        if(hash[i]&&root!=sf(i)){flag=0;break;}  
                    }         
                }  
                if(flag)printf("Case %d is a tree.
    ",cnt++);  
                else printf("Case %d is not a tree.
    ",cnt++);  
                init();  
            }else{  
                if(sf(x)==sf(y))flag=0;  
                if(!flag)continue;  
                hash[x]=hash[y]=1;  
                in[x]++;   
                f[sf(x)]=sf(y);  
            }  
        }     
    }  
    
    
  • 相关阅读:
    PetaPoco 基础操作
    Sql Server实现自动增长
    冒泡排序算法[C++]
    PHP 使用非对称加密算法(RSA)
    Linux的PHP开发环境快速搭建
    PHP常见漏洞攻击简述
    关于计算机编码的笔记
    简述面向对象编程原则和设计模式
    PHP错误处理注册机制
    规范数据库设计
  • 原文地址:https://www.cnblogs.com/forever97/p/3545005.html
Copyright © 2020-2023  润新知