poj 1182 食物链 (并查集 经典)

来源:互联网 发布:ubuntu命令行模式乱码 编辑:程序博客网 时间:2024/06/06 12:37

链接:http://poj.org/problem?id=1182

食物链
Time Limit: 1000MS Memory Limit: 10000KTotal Submissions: 68685 Accepted: 20303

Description

动物王国中有三类动物A,B,C,这三类动物的食物链构成了有趣的环形。A吃B, B吃C,C吃A。
现有N个动物,以1-N编号。每个动物都是A,B,C中的一种,但是我们并不知道它到底是哪一种。
有人用两种说法对这N个动物所构成的食物链关系进行描述:
第一种说法是"1 X Y",表示X和Y是同类。
第二种说法是"2 X Y",表示X吃Y。
此人对N个动物,用上述两种说法,一句接一句地说出K句话,这K句话有的是真的,有的是假的。当一句话满足下列三条之一时,这句话就是假话,否则就是真话。
1) 当前的话与前面的某些真的话冲突,就是假话;
2) 当前的话中X或Y比N大,就是假话;
3) 当前的话表示X吃X,就是假话。
你的任务是根据给定的N(1 <= N <= 50,000)和K句话(0 <= K <= 100,000),输出假话的总数。

Input

第一行是两个整数N和K,以一个空格分隔。
以下K行每行是三个正整数 D,X,Y,两数之间用一个空格隔开,其中D表示说法的种类。
若D=1,则表示X和Y是同类。
若D=2,则表示X吃Y。

Output

只有一个整数,表示假话的数目。

Sample Input

100 71 101 1 2 1 22 2 3 2 3 3 1 1 3 2 3 1 1 5 5

Sample Output

3

思路:并查集,之前小组内练习做过,所以比赛直接就知道是并查集了,不然我可能就各种if-else 了

放一个dalao博客:http://blog.csdn.net/niushuai666/article/details/6981689


代码:

#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>using namespace std;#define N 50010struct node{int pre;int relation;};node p[N];int find(int x) //查找根结点{int temp;if (x == p[x].pre)return x;temp = p[x].pre; //路径压缩p[x].pre = find(temp);p[x].relation = (p[x].relation + p[temp].relation) % 3; //关系域更新return p[x].pre; //根结点}int main(){int n, k;int ope, a, b;int root1, root2;int sum = 0; //假话数量scanf("%d%d", &n, &k);for (int i = 1; i <= n; ++i) //初始化{p[i].pre = i;p[i].relation = 0;}for (int i = 1; i <= k; ++i){scanf("%d%d%d", &ope, &a, &b);if (a > n || b > n) //条件2{sum++;continue;}if (ope == 2 && a == b) //条件3{sum++;continue;}root1 = find(a);root2 = find(b);if (root1 != root2) // 合并{p[root2].pre = root1;p[root2].relation = (3 + (ope - 1) + p[a].relation - p[b].relation) % 3;}else{if (ope == 1 && p[a].relation != p[b].relation){sum++;continue;}if (ope == 2 && ((3 - p[a].relation + p[b].relation) % 3 != ope - 1)){sum++;continue;}}}printf("%d\n", sum);return 0;}


0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 50天的宝宝便秘怎么办 人工喂养大便次数少怎么办 4个月宝宝肠炎怎么办? 三个月的宝宝拉肚子有奶瓣怎么办 吃米粉后不拉屎怎么办 宝宝拉绿色稀水怎么办 3个月宝宝肠胃炎怎么办 两个月婴儿拉水怎么办 3个月宝宝拉绿水怎么办 宝宝拉绿色的水怎么办 宝宝大便绿又水怎么办 8个月婴儿便秘怎么办 2个月婴儿便秘怎么办 四个月宝宝拉稀带有泡沫怎么办 六个月宝宝拉肚子怎么办拉水 婴儿拉的是沫怎么办 婴儿拉泡沫屎是怎么办 宝宝吃奶粉上火大便干燥怎么办 没满月的宝宝拉肚子怎么办 婴儿吃奶粉上火不大便怎么办 四个月宝宝拉沫怎么办 4个月小孩拉肚子怎么办 3个月的宝宝拉稀怎么办 宝宝没喝过奶粉怎么办 宝宝喝冰酸奶咳嗽了怎么办 7个月不爱喝奶怎么办 宝宝不认妈妈该怎么办 九个月宝宝不喝牛奶怎么办 吃羊肉和西瓜后怎么办 娃儿感冒了很咳怎么办 5岁娃儿经常感冒发烧怎么办 娃儿冷得发抖感冒怎么办 吃羊肉和茶后怎么办 宝宝胆汁酸高22怎么办 5个月发烧38度怎么办 28个月宝宝不愿把尿怎么办 16个月宝宝咳嗽怎么办 宝宝晚上不用纸尿裤要尿床怎么办 宝宝头型睡偏了怎么办 初生婴儿鼻子被奶块堵住怎么办 月经排的不顺畅怎么办