题目描述 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 Description

第一行是两个整数N和K,以一个空格分隔。   

以下K行每行是三个正整数D,X,Y,两数之间用一个空格隔开,其中 D 表示说法的种类。   

若D=1,则表示X和Y是同类。   

若D=2,则表示X吃Y。

输出描述 Output Description

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

样例输入 Sample Input

100 7

1 101 1

2 1 2

2 2 3

2 3 3

1 1 3

2 3 1

1 5 5

样例输出 Sample Output

3

数据范围及提示 Data Size & Hint

输入文件

对7句话的分析

100 7

1 101 1  假话

2 1 2    真话

2 2 3    真话

2 3 3    假话

1 1 3    假话

2 3 1    真话

1 5 5    真话

#include <bits/stdc++.h>using namespace std;
const int maxn = 50005 ;
int fa[maxn*3];
//扩大三倍:
//前n表示a吃的一类元素
//中n表示与a同一类元素
//后n表示吃a的一类元素
int n, k, X, Y, d;
int cnt;int find_set(int a)//找父节点
{if( fa[a] == a ) return a;else return fa[a]=find_set(fa[a]);
}void make_set(int x, int y)
{x = find_set(x);y = find_set(y);if( x == y ) return ;fa[y] = x ;//更新父节点
}int main()
{cin >> n >> k ;cnt = 0 ;for(int i=1; i<=3*n; i++)fa[i] = i ;// 初始父节点是其本身while( k-- ){cin >> d >> X >> Y ;if( X < 1 || Y < 1 ||Y > n  || X > n || ( X==Y && d==2))cnt ++ ;else{if( d == 1 ){if( find_set(X) == find_set(n+Y)|| find_set(X) == find_set(Y+2*n))cnt ++ ;else{make_set(X,Y);make_set(X+n, Y+n);make_set(X+2*n, Y+2*n);}}else{if(find_set(X) == find_set(Y) || find_set(Y+2*n)==find_set(X)) cnt ++ ;else{make_set(X,Y+n);make_set(X+n, Y+2*n);make_set(X+2*n, Y);}}}}cout << cnt << endl ;return 0;
}

转载于:https://www.cnblogs.com/Asimple/p/5513333.html

ACM题目————食物链相关推荐

  1. ACM题目中输入数据的处理(C++语言版)

    ACM题目中输入数据的处理(C语言版)见: http://blog.csdn.net/sxhelijian/article/details/8978794 ACM竞赛题目的输入数据常要求有多组,并且格 ...

  2. 杭电ACM题目类型整理

    版权声明:(╯3╰) 转载请注明: http://blog.csdn.net/bat67 杭电acm题目分类版本1 1002 简单的大数 1003 DP经典问题,最大连续子段和 1004 简单题 10 ...

  3. ACM题目 1012: [编程入门]字符串分类统计

    ACM题目 1012: [编程入门]字符串分类统计 题目描述 输入一行字符,分别统计出其中英文字母.数字.空格和其他字符的个数. 输入 一行字符 输出 统计值 样例输入 aklsjflj123 sad ...

  4. ACM题目中输入数据的处理(C++版)

    ACM题目中输入数据的处理(C语言版)见:http://blog.csdn.net/sxhelijian/article/details/8978794 ACM竞赛题目的输入数据常要求有多组,并且格式 ...

  5. ACM题目和培养训练!!!

    ACM大量习题题库 ACM大量习题题库 现在网上有许多题库,大多是可以在线评测,所以叫做Online Judge.除了USACO是为IOI准备外,其余几乎全部是大学的ACM竞赛题库. USACO ht ...

  6. 浙大OJ网址及ACM题目分类

    转自: http://blog.sina.com.cn/s/blog_61beb97b0100kquq.html 浙大oj网址:http://acm.zju.edu.cn/onlinejudge/ 第 ...

  7. PUK ACM题目分类

    acm之pku题目分类 对ACM有兴趣的同学们可以看看 DP:  1011   NTA                 简单题  1013   Great Equipment     简单题  102 ...

  8. 由一道acm题目所想到

    已经很长一段时间没有ac题了,一周之前报名参加了计算客的编程大赛,虽然我的结果不 是特别理想,但是还是学到了一些东西.下边,我先贴出题目和对应的程序源码: 代码如下:(c语言) #include< ...

  9. HDOJ ACM 题目

    转载 HDOJ 题目分类(转) 1001 整数求和 水题 1002 C语言实验题--两个数比较 水题 1003 1.2.3.4.5... 简单题 1004 渊子赛马 排序+贪心的方法归并 1005 H ...

最新文章

  1. Redis学习(4)-数据类型set和zset
  2. Leaflet中使用awesome-markers插件显示带图标的marker
  3. JZOJ 5850. 【NOIP提高组模拟2018.8.25】e
  4. 数据结构和算法(Java)-张晨光-专题视频课程
  5. php strtotime month bug,处理PHP strtotime的BUG
  6. 布隆过滤器的原理、应用场景和源码分析实现
  7. 前端学习(2550):事件指令解析
  8. 通过select选项动态异步加载内容
  9. CMOS数字集成电路
  10. 《地理天机一贯 》   聚宝馆手抄珍稀古籍分享
  11. “浙大学霸作息表”疯传,网友:越优秀就越努力!
  12. 如何用post方法请求数据?
  13. 《从一到无穷大:科学中的事实和臆测》小记
  14. 最近看中的几款Limitless的家具
  15. 什么是服务器托管?服务器托管和虚拟主机的区别
  16. MongoDB 运行 service mongod start 后服务没有启动成功
  17. 安装Swoole报错 make: *** [php_swoole_cxx.lo] Error 1
  18. 计算机图形学(1)——概论
  19. 屏幕下雪特效的jQuery实现
  20. 电子邮件安全对企业的重要性

热门文章

  1. 通过 User-Agent 请求头判断设备类型
  2. “10%时间”:优点和缺点——敏捷海滩会议上Elizabeth Pope的报告
  3. 教你怎么使用你的电脑
  4. db2 命令选项解释
  5. 修改windows XP/2000/2003用缩略图方式浏览图片时的默认尺寸
  6. 一步一步教你使用AgileEAS.NET基础类库进行应用开发-基础篇-演示ORM中的查询
  7. Adobe Acrobat 高亮工具使用后无法显示文字Bug解决办法
  8. New template: condition
  9. MySQL助手_java 8.0Mysql 助手类
  10. web前端之框架(frameset)