HDU 4496 D-City

并查集倒过来用就好了,水题。

但是题目貌似有多组数据,可又没有说明,导致我wa了两次。

 1 #include<stdio.h>
 2 #include<iostream>
 3 using namespace std;
 4 
 5 #include<math.h>
 6 #include<algorithm>
 7 #include<string.h>
 8 #include<stdlib.h>
 9 #include<vector>
10 #include<set>
11 #include<map>
12 #include<stack>
13 #include<string>
14 #include<queue>
15 
16 #define repA(p,q,i)  for( int (i)=(p); (i)!=(q); ++(i) )
17 #define repAE(p,q,i)  for( int (i)=(p); (i)<=(q); ++(i) )
18 #define repD(p,q,i)  for( int (i)=(p); (i)!=(q); --(i) )
19 #define repDE(p,q,i)  for( int (i)=(p); (i)>=(q); --(i) )
20 #define range 100010
21 
22 int n,m;
23 int road[range][2]; 
24 int f[range];
25 int condition[range];
26 
27 int find(int s);
28 
29 int main()
30 {
31     
32     while( scanf("%d%d",&n,&m) != EOF )
33     {
34     repAE(1,m,i)
35       scanf("%d%d",&road[i][0], &road[i][1]);
36 
37     repA(0,n,i)  f[i] = i;
38     
39     int all=n;
40     condition[m] = n;
41     int p,q;
42 
43     repDE(m,1,i)
44     {
45         p = find(road[i][0] ) ;
46         q = find(road[i][1] ) ;
47 
48         if(p != q)
49         {
50             f[q] = p;
51               --all;
52         }
53 
54         condition[i-1]=all;
55     }
56 
57     repAE(1,m,i)
58       printf("%d\n",condition[i]);
59     }
60     //while(1);
61     return 0;
62 }
63 
64 int find( int s )
65 {
66     if( s != f[s] )
67       f[s] = find( f[s] );
68     return f[s];    
69 }
View Code

 

posted on 2013-11-10 17:54  码农之上~  阅读(165)  评论(0编辑  收藏  举报

导航