hdoj 1272

题目链接http://acm.hdu.edu.cn/showproblem.php?pid=1272

并查集

 1  #include  < iostream >
 2  #include  < algorithm >
 3 
 4  using   namespace  std;
 5 
 6  int  f[ 100001 ];
 7  bool  dis[ 100001 ];
 8 
 9  int  Find( int  x)
10  {
11       while ( x  !=  f[x] ){
12          x  =  f[x];
13      }
14      
15       return  x;
16  }
17 
18  int  Union( int  x,  int  y)
19  {
20       if ( x  ==  y ){
21           return   0 ;
22      }
23       if ( x  <  y ){
24          f[x]  =  y;
25      }
26       else {
27          f[y]  =  x;
28      }
29       return   1 ;
30  }
31 
32  int  main()
33  {
34       int  s, e, flag;
35       int  sn, en, temp;
36      
37       for ( int  i = 0 ; i < 100001 ; i ++ ){
38          f[i]  =  i;
39          dis[i]  =   false ;
40      }
41      flag  =   true ; sn  =   100001 ; en  =   0 ;
42       while ( scanf( " %d%d " & s,  & e), ( s  !=   - 1   ||  e  !=   -   1  ) ){
43           if ( s  +  e  ==   0  ){
44               if ( flag ){
45                  temp  =  Find(sn);
46                   for ( int  i = sn + 1 ; i <= en; i ++ ){
47                       if (dis[i]  &&  temp  !=  Find(i)){
48                          flag  =   false ;
49                           break ;
50                      }
51                  }
52              }
53              printf( " %s\n " , flag  ?   " Yes "  :  " No " );
54               for ( int  i = sn; i <= en; i ++ ){
55                  f[i]  =  i;
56                  dis[i]  =   false ;
57              }
58              sn  =   100001 ; en  =   0 ;
59              flag  =   true ;
60               continue ;
61          }
62          dis[e]  =  dis[s]  =   true ;
63          sn  =  min(sn, s);
64          sn  =  min(sn, e);
65          en  =  max(en, s);
66          en  =  max(en, e);
67           if ( flag ){
68              flag  =  Union(Find(s), Find(e));
69          }
70      }
71      
72       return   0 ;
73  }
几个初始化变量写错了,搞的我w了好几次!

 

 

转载于:https://www.cnblogs.com/accepted/articles/1807541.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值