• 利用并查集判断一个有向图是否成树


    hdu 1325

    此题与hdu 1272类似。

    但此题需注意以下几点:

    1.当输入两个负数时退出,不是当输出-1 -1 (这点不注意将一直超时T_T)

    2.对树的判断除了不成环,还需注意一个问题:此图为有向图:当b的根不是他自己或a时,b 这个节点有两个跟,同样不成数。

        if(f1 == f2 || f2 != b)
            flag = 1;
     1 #include<stdio.h>
     2 #include<string.h>
     3 #define N 110000
     4 int f[N],vis[N];
     5 int flag = 0;
     6 int Maxx = 0;
     7 int num = 1;
     8 int Max(int a,int b)
     9 {
    10     return a>b?a:b;
    11 }
    12 void star1()
    13 {
    14     int i;
    15     for(i = 0;i < N;i ++)
    16     {
    17         f[i] = i;
    18     }
    19     memset(vis,0,sizeof(vis));
    20     flag = 0;
    21     Maxx = 0;
    22 }
    23 int root(int i)
    24 {
    25     if(f[i] == i)
    26         return i;
    27     else
    28         return root(f[i]);
    29 }
    30 void U(int a,int b)
    31 {
    32     int f1,f2;
    33     f1 = root(a);
    34     f2 = root(b);
    35     if(f1!= f2)
    36         f[f2] = f1;
    37     if(f1 == f2 || f2 != b)
    38         flag = 1;
    39 }
    40 int main()
    41 {
    42     int n,m,i,j,k;
    43     int a,b;
    44     star1();
    45     while(~scanf("%d %d",&a,&b)&& a>=0 && b>=0)
    46     {
    47         if(a==0 && b ==0)
    48         {
    49             k = 0;
    50             for(i = 1;i <= Maxx;i ++)
    51             {
    52                 if(vis[i] && f[i] == i)
    53                     k ++;
    54             }
    55             if(k <= 1 && flag == 0)
    56             {
    57                 printf("Case %d is a tree.
    ",num++);
    58             }
    59             else
    60             {
    61                 printf("Case %d is not a tree.
    ",num++);
    62             }
    63             star1();
    64         }
    65         else
    66         {
    67             Maxx = Max(Maxx,Max(a,b));
    68             vis[a] = vis[b] = 1;
    69             U(a,b);
    70         }
    71     }
    72     return 0;
    73 }
    c++
  • 相关阅读:
    C++指针
    C++ 结构体和枚举
    提供openssl -aes-256-cbc兼容加密/解密的简单python函数
    最新安全学习视频
    C++复合类型(结构体)
    C艹复合类型(字符串)
    C++复合类型(数组)
    python 搜索引擎Whoosh中文文档和代码 以及jieba的使用
    JSP基础之 C标签中的 varStatues属性
    JSP进阶 之 SimpleTagSupport 开发自定义标签
  • 原文地址:https://www.cnblogs.com/ypacm/p/6690874.html
Copyright © 2020-2023  润新知