poj1703

与1182一个思路 并查集加偏移量 不过比1182好做一些

View Code
 1 #include <stdio.h>
 2 int father[100005], r[100005];
 3 void init(int n)
 4 {
 5     int i;
 6     for(i = 1 ; i <= n ; i++)
 7     {
 8         r[i] = 0;
 9         father[i] = i;
10     }
11 }
12 int find(int x)
13 {
14     if(x!=father[x])
15     {
16         int pre = father[x];
17         father[x] = find(father[x]);
18         r[x] = (r[x]+r[pre])%2;
19     }
20     return father[x];
21 }
22 void union1(int x, int y,int d)
23 {
24     father[x] = y;
25     r[x] = d%2;
26 }
27 int main()
28 {
29     int t, m, n, i, j, k, num, x, y;
30     char c;
31     scanf("%d", &t);
32     while(t--)
33     {
34         scanf("%d%d", &m, &n);
35         init(m);
36         while(n--)
37         {
38             getchar();
39             scanf("%c %d %d", &c,&x,&y);
40             int pa = find(x);
41             int pb = find(y);
42             if(c == 'D')
43            {
44                if(pa!=pb)
45                union1(pa,pb,r[y]-r[x]+1);
46            }
47            else
48            {
49                if(pa == pb)
50                {
51                    if(r[x] == r[y])
52                    printf("In the same gang.\n");
53                    else
54                    printf("In different gangs.\n");
55                }
56                else
57                printf("Not sure yet.\n");
58            }
59         }
60     }
61     return 0;
62 }

 

posted @ 2012-07-05 22:32  _雨  阅读(200)  评论(0编辑  收藏  举报