zoukankan      html  css  js  c++  java
  • hdu1829A Bug's Life(种类并查集)

    传送门

    关键在于到根节点的距离,如果两个点到根节点的距离相等,那么他们性别肯定就一样(因为前面如果没有特殊情况,两个点就是一男一女的)。一旦遇到性别一样的,就说明找到了可疑的

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 int f[2005],n,m,rankk[2005];
     4 bool flag;
     5 inline void init()
     6 {
     7     flag=false;
     8     for(int i=0; i<=n; ++i)
     9         f[i]=i, rankk[i]=0;
    10 }
    11 int getf(int v)
    12 {
    13     if(v==f[v])return f[v];
    14     int t=getf(f[v]);
    15     rankk[v] = (rankk[f[v]]+rankk[v])&1;//到根节点的距离
    16     f[v]=t;
    17     return f[v];
    18 }
    19 void merge(int v, int u)
    20 {
    21     int t1=getf(v), t2=getf(u);
    22     if(t1==t2)
    23     {
    24         if(rankk[v]==rankk[u])//到根节点的距离相等,就表示他们的性别相同
    25             flag=true;
    26         return;
    27     }
    28     f[t1]=t2;//if(t1!=t2)
    29     rankk[t1] = (rankk[v]+rankk[u]+1)&1;
    30 }
    31 int main()
    32 {
    33     int t;
    34     scanf("%d",&t);
    35     int cases=1;
    36     while(t--)
    37     {
    38         scanf("%d%d",&n,&m);
    39         init();
    40         for(int i=0; i<m; i++)
    41         {
    42             int a,b;
    43             scanf("%d%d",&a,&b);
    44             if(flag)continue;
    45             merge(a,b);
    46         }
    47         printf("Scenario #%d:
    ",cases++);
    48         if(flag)printf("Suspicious bugs found!
    ");
    49         else printf("No suspicious bugs found!
    ");
    50         printf("
    ");
    51     }
    52 
    53     return 0;
    54 }
    View Code
  • 相关阅读:
    [贪心]P1049 装箱问题
    js中字符串转换为日期和比较大小
    weblogic配置数据源出错
    myeclipse安装svn插件的多种方式
    使用令牌实现防重复提交
    struts1.3异常处理机制
    spring log4j.properties
    spring jdbc.property的配置与使用
    js循环array,json,map
    java web的一些特殊用法(一)
  • 原文地址:https://www.cnblogs.com/fqfzs/p/9998197.html
Copyright © 2011-2022 走看看