geniusgogo

导航

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了好几次!

 

 

posted on 2010-08-24 18:46  geniusgogo  阅读(144)  评论(0编辑  收藏  举报