zoukankan      html  css  js  c++  java
  • HDU

     1 #include<stdio.h>
     2 int map[100005],aggregate[100005];
     3 int father(int x)
     4 {
     5     while(x!=aggregate[x])
     6     {
     7         x=father(aggregate[x]);
     8     }
     9     return x;
    10 }
    11 int main()
    12 {
    13     int i,j,k,l,n,m,x,y,a,b;
    14     for(i=0;i<100001;i++)
    15     {
    16         map[i]=0;
    17         aggregate[i]=i;
    18     }
    19     k=0;
    20     while(scanf("%d%d",&a,&b)!=EOF)
    21     {
    22         if((a==0)&&(b==0))
    23         {
    24             l=0;
    25             for(i=1;i<100001;i++)
    26             {
    27                 if((l==0)&&(map[i]==1))
    28                 {
    29                     l=aggregate[i];
    30                     break;
    31                 }
    32             }
    33             for(i=i;i<100001;i++)
    34             {
    35                 if((map[i]==1)&&(father(i)!=l))
    36                 {
    37                     k=1;
    38                     break;
    39                 }
    40             }
    41 //判断是否所有点根节点都相同,相同说明所有点都联通。
    42             if(k==0) printf("Yes
    ");
    43             if(k==1) printf("No
    ");
    44             for(i=0;i<100001;i++)
    45             {
    46                 map[i]=0;
    47                 aggregate[i]=i;
    48             }
    49             k=0;
    50 //清零。
    51         }
    52         if(k==1) continue;//此时k=1且a!=0,b!=0,那么不用判断a,b是够联通,之前已经有点相互联通了,迷宫已经是不符合条件的状态了。
    53         if((a==-1)&&(b==-1)) break;//结束程序
    54         if((a!=0)&&(b!=0))
    55         {
    56             if(map[a]==0) map[a]=1;
    57             if(map[b]==0) map[b]=1;
    58 //如果a,b第一次出现则标记为已出现。
    59             x=father(a);
    60             y=father(b);
    61 //找a,b根节点的函数。
    62             if(x==y)
    63             {
    64                 k=1;
    65             }//x==y的情况a,b联通。
    66             else
    67             {
    68                 if(x<y) aggregate[y]=x;
    69                 else aggregate[x]=y;
    70             }//不连通则合并两个集合
    71         }
    72     }
    73 }
    View Code
  • 相关阅读:
    洛谷#P5652#基础博弈练习题
    hgoi#20191112
    hgoi#20191111
    hgoi#20191109
    洛谷#P3674#小清新人渣的本愿
    hgoi#20191108
    hgoi#20191107
    树上差分
    树链剖分(树剖)
    LCA(最近公共祖先)问题
  • 原文地址:https://www.cnblogs.com/NWUACM/p/6659622.html
Copyright © 2011-2022 走看看