首页 > 其他 > 详细

poj 1703 Find them, Catch them(并查集)

时间:2014-02-18 10:26:37      阅读:458      评论:0      收藏:0      [点我收藏+]

题目:http://poj.org/problem?id=1703

题意:一个地方有两个帮派, 每个罪犯只属于其中一个帮派,D 后输入的是两个人属于不同的帮派,

A后询问 两个人是否属于 同一个帮派。

用op[]数组记录 不跟自己在一个帮派中的一个人, 然后再输入不跟自己在一个帮派的人的时候,把

这个人跟 op[]数组记录里的那个人联系起来, 这两个人属于一个帮派。

bubuko.com,布布扣
 1 #include <iostream>
 2 #include <cstdio>
 3 #include <cstring>
 4 #include <cstdlib>
 5 #include <algorithm>
 6 using namespace std;
 7 const int maxn = 100010;
 8 int bin[maxn], op[maxn], n;
 9 void init()
10 {
11     for(int i = 1; i <= n; i++)
12     {
13         bin[i] = i;
14         op[i] = 0;
15     }
16 }
17 int find(int x)
18 {
19     int r, i, j;
20     r =  x;
21     while(r != bin[r])
22     r = bin[r];
23     i = x;
24     while(bin[i] != r)
25     {
26         j = bin[i];
27         bin[i] = r;
28         i = j;
29     }
30     return r;
31 }
32 
33 void merge(int x, int y)
34 {
35     int fx, fy;
36     fx = find(x);
37     fy = find(y);
38     if(fx != fy)
39     bin[fx] = fy;
40 }
41 int main()
42 {
43     int t, m, a, b;
44     char ch;
45     scanf("%d", &t);
46     while(t--)
47     {
48         scanf("%d%d", &n, &m);
49         init();
50 
51         while(m--)
52         {
53            getchar();
54            scanf("%c%d%d",&ch, &a, &b);
55            if(ch == A)
56            {
57                int x, y;
58                x = find(a);
59                y = find(b);
60                if(x == y)
61                printf("In the same gang.\n");
62                else if(op[a]!=0&&find(op[a])==y || op[b]!=0&&find(op[b])==x)
63                printf("In different gangs.\n");
64                else
65                printf("Not sure yet.\n");
66            }
67            else
68            {
69                if(op[a] == 0)
70                op[a] = b;
71                else
72                merge(op[a],b);
73                if(op[b] == 0)
74                op[b] =a;
75                else
76                merge(op[b],a);
77            }
78         }
79     }
80     return 0;
81 }
bubuko.com,布布扣

poj 1703 Find them, Catch them(并查集)

原文:http://www.cnblogs.com/bfshm/p/3553154.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!