poj1182 食物链(并查集 好题)

Posted Surprisez

tags:

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

https://vjudge.net/problem/POJ-1182

并查集经典题

对于每只动物创建3个元素,x, x+N, x+2*N(分别表示x属于A类,B类和C类)。

把两个元素放在一个组代表他们同时发生。

被不合法数据卡了几次。

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<queue>
 4 #include<cstring>
 5 #include<algorithm>
 6 #include<cmath>
 7 #include<stack>
 8 #define lson l, m, rt<<1
 9 #define rson m+1, r, rt<<1|1
10 #define IO ios::sync_with_stdio(false);cin.tie(0);
11 #define INF 0x3f3f3f3f
12 typedef unsigned long long ll;
13 using namespace std;
14 const int N = 50000;
15 int n, k, d, x, y, ans=0;
16 int pre[50010*3];
17 int find(int x)
18 {
19     while(x != pre[x]){
20         x = pre[x];
21     }
22     return x;
23 }
24 int is_same(int a, int b)
25 {
26     int tx = find(a);
27     pre[a] = tx;
28     int ty = find(b);
29     pre[b] = ty; 
30     if(tx == ty) return 1;
31     else return 0;
32 }
33 void join(int a, int b)
34 {
35     int tx = find(a);
36     int ty = find(b);
37     pre[tx] = ty;
38 }
39 void solve()
40 {
41     if(d == 1){//x和y等价 
42         if(x > n||x<=0||y > n||y<=0){//不合法 
43             ans++;
44             return ;
45         }
46         else if(is_same(x, y+N)||is_same(x, y+2*N))//冲突情况,B吃A,C吃A
47             ans++; 
48         else{ 
49             join(x, y);
50             join(x+N, y+N);
51             join(x+2*N, y+2*N);
52         }
53     }
54     else if(d == 2){//x吃y 
55         if(x > n||x<=0||y > n||y<=0){//不合法 
56             ans++;
57             return ;
58         }
59         else if(is_same(x, y)||is_same(x, y+2*N)) //冲突情况,A同B,C吃A
60             ans++; 
61         else{ 
62             join(x, y+N);
63             join(x+N, y+2*N);
64             join(x+2*N, y); 
65         }
66     }
67 }
68 int main()
69 {
70     for(int i = 0; i <= N*3; i++){
71         pre[i] = i;
72     }
73     scanf("%d%d", &n, &k);
74     for(int i = 0; i < k; i++){
75         scanf("%d%d%d", &d, &x, &y);
76         solve();
77     }
78     printf("%d\n", ans);
79     return 0;
80 }

 

以上是关于poj1182 食物链(并查集 好题)的主要内容,如果未能解决你的问题,请参考以下文章

POJ1182 食物链 —— 带权并查集

POJ1182并查集

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

POJ 1182 食物链 种类并查集

POJ1182 食物链---(经典种类并查集)

并查集:POJ 1182 食物链 复习