食物链 2001年NOI全国竞赛
时间限制: 3 s
空间限制: 64000 KB
题目等级 : 钻石 Diamond
题解
查看运行结果
题目描述 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   真话

NOI 2001 食物链(eat)
——————————————————————————————————————————————
思路:用虚点表示每个动物的天敌和食物,如果不和前面相符就ans++,没有不相符则将两动物按法则(1or2)连起来即可
代码:

#include<cstdio>
#include<iostream>
#include<cstring>
using namespace std;
int n,k,father[150010],ans;
int find(int x)
{if (father[x]!=x) father[x]=find(father[x]);return father[x];
}
void unions(int x,int y)
{int p=find(x),q=find(y);if (p!=q)father[p]=q;
}
main()
{scanf("%d%d",&n,&k);for (int i=1;i<=3*n;i++) father[i]=i;for (int i=1;i<=k;i++){int flag,x,y;scanf("%d%d%d",&flag,&x,&y);if (x>n||y>n) {ans++;continue;}//超出n范围if (x==y&&flag==2) {ans++;continue;}//自己吃自己if (flag==1){if (find(x)==find(y+n)||find(x)==find(y+2*n)||find(x+n)==find(y)||find(x+n)==find(y+2*n)||find(x+2*n)==find(y)||find(x+2*n)==find(y+n)){ans++;continue;}else { unions(x+n,y+n);unions(x,y);unions(x+2*n,y+2*n);}}   if (flag==2){if (find(x)==find(y)||find(x)==find(y+n)||find(x+n)==find(y+n)||find(x+n)==find(y+2*n)||find(x+2*n)==find(y)||find(x+2*n)==find(y+2*n)) {ans++;continue;}else {unions(x,y+2*n);unions(x+n,y);unions(x+2*n,y+n);}   }} printf("%d",ans);
}

【codevs1074】食物链相关推荐

  1. 【洛谷P2024】食物链

    题目描述 动物王国中有三类动物 A,B,C,这三类动物的食物链构成了有趣的环形.A 吃 B,B 吃 C,C 吃 A. 现有 N 个动物,以 1 - N 编号.每个动物都是 A,B,C 中的一种,但是我 ...

  2. [kuangbin带你飞]专题五 并查集 E - 食物链 (带权并查集)

    E - 食物链 题目链接:https://vjudge.net/contest/66964#problem/E 动物王国中有三类动物A,B,C,这三类动物的食物链构成了有趣的环形.A吃B, B吃C,C ...

  3. [bzoj4562][Haoi2016]食物链_记忆化搜索_动态规划

    食物链 bzoj-4562 Haoi-2016 题目大意:给你n个点,m条边的DAG,求所有的满足条件的链,使得每条链的起点是一个入度为0的点,中点是一条出度为0的点. 注释:$1\le n\le 1 ...

  4. 记忆优化搜索(简单题)(洛谷P3183 [HAOI2016]食物链 )( P5635 【CSGRound1】天下第一 )

    昨天做了蓝桥杯的时候,发现自己对于记忆优化搜索甚是不熟悉,所以今天随便找了几个基础题做做,顺便写下两片题解,顺便用了一下devc++敲的代码,发现没有代码补全真的可以说是灰常难受了... 洛谷P318 ...

  5. C - 食物链 POJ - 1182

    C - 食物链 POJ - 1182 大佬,%%% 加入给你一个 1, 那 1 应该放进 A.B.还是C呢,不知道了,所以开三倍的空间, 1~n 表示 A, n+1~2n 表示 B, 2n+1 ~ 3 ...

  6. POJ-1182 食物链(并查集)

    食物链 Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 75814   Accepted: 22528 Description ...

  7. 食物链 poj 1182

    C - 食物链 Time Limit:1000MS     Memory Limit:10000KB     64bit IO Format:%I64d & %I64u Submit Stat ...

  8. LuoguP3183 [HAOI2016]食物链 记忆化搜索

    题目描述 如图所示为某生态系统的食物网示意图,据图回答第1小题现在给你n个物种和m条能量流动关系,求其中的食物链条数.物种的名称为从1到n编号M条能量流动关系形如a1 b1a2 b2a3 b3.... ...

  9. 洛谷P3183食物链题解

    不得不说,这是道很难减少时间复杂度的题,且这个题有点像一道拓扑排序题,但是这个难度标签有点低. 我们应该可以想到拓扑排序可能是这个题的正解,但是题目中有输出总数,因此我们就可以造一个数组表示从这个点出 ...

最新文章

  1. python简单代码加法-CPython 源码中整数加法的实现
  2. 本地生活服务 巨头们玩不转的电商蓝海
  3. C++内存模型和原子类型操作
  4. 双系统重装windows后如何恢复ubuntu启动项
  5. 二分搜索(折半搜索),lower_bound,upper_bound
  6. 因为犯罪被判三年刑,期间没办法还信用卡,银行会怎么做?
  7. idea 创建java文件_idea创建java文件 格式不对
  8. 我的世界服务器如何做无限箱子,我的世界无限存储箱子制作教程详解
  9. 被Google收购的Postini
  10. Mac删除Windows10后空间丢失解决
  11. vscode 日志文件_VSCode使用WSL环境开发C语言配置
  12. 2018年广发证券信息技术部面试总结
  13. 数据分析在微博营销中的应用
  14. Excel拆分同一单元格的两行内容为两行(备忘记录)
  15. 计算机实际上是如何工作的
  16. 一个蚂蚁曾经的辛酸面试历程
  17. 桌面路径不小心改成磁盘根目录改不回去解决方案
  18. Error:Kotlin: Module was compiled with an incompatible version of Kotlin. Th
  19. sqlyog怎么连接mysql_Windows Server系统部署MySQL数据库
  20. [Android]全球6亿人都在用的修图神器,PicsArt专业直装版

热门文章

  1. 关于Python中的错误与异常,你是否了解的够仔细?
  2. 使用Python编写打字训练小程序
  3. 野生前端的数据结构练习(11)动态规划算法
  4. 【Python3网络爬虫开发实战】1.2.4-GeckoDriver的安装
  5. java中 与%_java中“/”与“%”的区别
  6. Linux openJDK执行javac编译java文件提示command not found
  7. 某东商城获取eid和fp参数方法
  8. android权限机制6.0,Android6.0权限机制(二):封装
  9. java数组深拷贝和浅拷贝_java List复制:浅拷贝与深拷贝
  10. 无线文件服务器,文件共享新方法 无线网络文件共享设置