zoukankan      html  css  js  c++  java
  • 并查集 4104 这是一棵树吗

    判断是不是树

    输入:

    每输入一对都为0的数时,表示一组数据输入完毕。每条边有一对正整数表示,第一个数为有向边的起始边,第二个数为有向边的终止点。一对负数的输入就表示输入的结束。

    输出:

    每组测试数据输出一行判断结果,若输入的图为树,则输出“Case k is a tree.”,否则输出“Case k is not a tree.”其中k表示每组数据的编号(编号从1开始)。

    样例输入:

    6 8 5 3 5 2 6 4

    5 6 0 0

    8 1 7 3 6 2 8 9 7 5

    7 4 7 8 7 6 0 0

    3 8 6 8 6 4

    5 3 5 6 5 2 0 0

    -1 -1

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cstring>
     4 #include<cmath>
     5 #include<cstdlib>
     6 //int cmp(const void*a,const void*b)
     7 //{
     8 //    return(*(int *)a)<(*(int *)b)?1:-1;
     9 //}
    10 int f[1000000];
    11 int flag[1000000];
    12 int find(int x)
    13 {
    14     if(f[x]!=x)
    15     f[x]=find(f[x]);
    16     return f[x];
    17 }
    18 
    19 int join(int x,int y)
    20 {
    21     int a=find(x);
    22     int b=find(y);
    23     if(b!=y)
    24     return 1;
    25     if(a==b)
    26     return 1;
    27     else
    28     f[b]=a;
    29     return 0;
    30 }
    31 
    32 int main()
    33 {
    34     int a,b;
    35     int t=0,key=0,max=0,g=0,p=1;
    36     memset(flag,0,sizeof(flag));
    37     for(int i=1;i<=999999;i++)
    38     f[i]=i;
    39     while(1)
    40     {
    41         scanf("%d%d",&a,&b);
    42         if(a>max)
    43         max=a;
    44         if(b>max)
    45         max=b;
    46         if(a<=-1&&b<=-1)
    47         break;
    48         if(a==0&&b==0)
    49         {
    50             for(int i=1;i<=max;i++)
    51             {
    52                 if(flag[i]==1&&f[i]==i)
    53                 g++;
    54             }
    55             if(key>0||g>=2)
    56             printf("Case %d is not a tree.
    ",p++);
    57             else
    58             printf("Case %d is a tree.
    ",p++);
    59             t=0;key=0;max=0;g=0;
    60             memset(flag,0,sizeof(flag));
    61             for(int i=1;i<=999999;i++)
    62             f[i]=i;
    63         }
    64         else
    65         {
    66             flag[a]=1;
    67             flag[b]=1;
    68             key+=join(a,b);
    69         }
    70     }
    71 
    72     return 0;
    73 }
    View Code
  • 相关阅读:
    用 Python、 RabbitMQ 和 Nameko 实现微服务
    自定义Docker容器的 hostname
    ubuntu下升级R版本
    pair correlation ggpair ggmatrix
    RabbitMQ消息队列(一): Detailed Introduction 详细介绍
    ng-controller event data
    node项目换了环境node_modules各种报错
    Blast本地化
    angularjs $q、$http 处理多个异步请求
    解决angular页面值闪现问题
  • 原文地址:https://www.cnblogs.com/xuesen1995/p/4105860.html
Copyright © 2011-2022 走看看