POJ 1182 并查集

Posted tcctw

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了POJ 1182 并查集相关的知识,希望对你有一定的参考价值。

 用cin cout会超时。。。

 1 #include<iostream>
 2 #include<vector>
 3 #include<stack>
 4 #include<cstring>
 5 using namespace std;
 6 
 7 const int maxn = 50000 + 10;
 8 int par[maxn * 3], ran[maxn * 3];
 9 int n, k;
10 
11 void init(int n)
12 {
13     for (int i = 0; i < n; i++) {
14         par[i] = i;
15         ran[i] = 0;
16     }
17 }
18 
19 int Find(int x)
20 {
21     if (par[x] == x) return x;
22     else return par[x] = Find(par[x]);
23 }
24 
25 void unite(int x, int y)
26 {
27     x = Find(x);
28     y = Find(y);
29     if (x == y) par[x] = y;
30     if (ran[x] < ran[y]) {
31         par[x] = y;
32     }
33     else {
34         par[y] = x;
35         if (ran[x] == ran[y]) ran[x]++;
36     }
37 }
38 
39 bool same(int x, int y)
40 {
41     return Find(x) == Find(y);
42 }
43 
44 int main()
45 {
46     int d, x, y, ans = 0;
47     scanf("%d%d", &n, &k);
48     init(n * 3 + 5);
49     ans = 0;
50     for (int i = 0; i < k; i++) {
51         scanf("%d%d%d", &d, &x, &y);
52         x = x - 1;
53         y = y - 1;
54         if (x < 0 || x >= n || y < 0 || y >= n) {
55             ans++;
56             continue;
57         }
58 
59         if (d == 1) {
60             if (same(x, y + n) || same(x, y + n * 2)) {
61                 ans++;
62             }
63             else {
64                 unite(x, y);
65                 unite(x + n, y + n);
66                 unite(x + n * 2, y + n * 2);
67             }
68         }
69         if (d == 2) {
70             if (same(x, y) || same(x, y + n * 2)) { //注意以下的判断
71                 ans++;
72             }
73             else {  
74                 unite(x, y + n);
75                 unite(x + n, y + n * 2);
76                 unite(x + n * 2, y);
77             }
78         }
79     }
80     printf("%d\n", ans);
81 }

 

以上是关于POJ 1182 并查集的主要内容,如果未能解决你的问题,请参考以下文章

POJ 1182 (经典食物链 /并查集扩展)

POJ1182并查集

poj1182(带权并查集)

带权并查集(含种类并查集)经典模板 例题:①POJ 1182 食物链(经典)②HDU - 1829 A bug's life(简单) ③hihoCoder 1515 : 分数调查(示例代码(代

poj 1182 (扩展并查集)

POJ 1182 并查集