【codevs1074】食物链
食物链 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】食物链相关推荐
- 【洛谷P2024】食物链
题目描述 动物王国中有三类动物 A,B,C,这三类动物的食物链构成了有趣的环形.A 吃 B,B 吃 C,C 吃 A. 现有 N 个动物,以 1 - N 编号.每个动物都是 A,B,C 中的一种,但是我 ...
- [kuangbin带你飞]专题五 并查集 E - 食物链 (带权并查集)
E - 食物链 题目链接:https://vjudge.net/contest/66964#problem/E 动物王国中有三类动物A,B,C,这三类动物的食物链构成了有趣的环形.A吃B, B吃C,C ...
- [bzoj4562][Haoi2016]食物链_记忆化搜索_动态规划
食物链 bzoj-4562 Haoi-2016 题目大意:给你n个点,m条边的DAG,求所有的满足条件的链,使得每条链的起点是一个入度为0的点,中点是一条出度为0的点. 注释:$1\le n\le 1 ...
- 记忆优化搜索(简单题)(洛谷P3183 [HAOI2016]食物链 )( P5635 【CSGRound1】天下第一 )
昨天做了蓝桥杯的时候,发现自己对于记忆优化搜索甚是不熟悉,所以今天随便找了几个基础题做做,顺便写下两片题解,顺便用了一下devc++敲的代码,发现没有代码补全真的可以说是灰常难受了... 洛谷P318 ...
- C - 食物链 POJ - 1182
C - 食物链 POJ - 1182 大佬,%%% 加入给你一个 1, 那 1 应该放进 A.B.还是C呢,不知道了,所以开三倍的空间, 1~n 表示 A, n+1~2n 表示 B, 2n+1 ~ 3 ...
- POJ-1182 食物链(并查集)
食物链 Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 75814 Accepted: 22528 Description ...
- 食物链 poj 1182
C - 食物链 Time Limit:1000MS Memory Limit:10000KB 64bit IO Format:%I64d & %I64u Submit Stat ...
- LuoguP3183 [HAOI2016]食物链 记忆化搜索
题目描述 如图所示为某生态系统的食物网示意图,据图回答第1小题现在给你n个物种和m条能量流动关系,求其中的食物链条数.物种的名称为从1到n编号M条能量流动关系形如a1 b1a2 b2a3 b3.... ...
- 洛谷P3183食物链题解
不得不说,这是道很难减少时间复杂度的题,且这个题有点像一道拓扑排序题,但是这个难度标签有点低. 我们应该可以想到拓扑排序可能是这个题的正解,但是题目中有输出总数,因此我们就可以造一个数组表示从这个点出 ...
最新文章
- python简单代码加法-CPython 源码中整数加法的实现
- 本地生活服务 巨头们玩不转的电商蓝海
- C++内存模型和原子类型操作
- 双系统重装windows后如何恢复ubuntu启动项
- 二分搜索(折半搜索),lower_bound,upper_bound
- 因为犯罪被判三年刑,期间没办法还信用卡,银行会怎么做?
- idea 创建java文件_idea创建java文件 格式不对
- 我的世界服务器如何做无限箱子,我的世界无限存储箱子制作教程详解
- 被Google收购的Postini
- Mac删除Windows10后空间丢失解决
- vscode 日志文件_VSCode使用WSL环境开发C语言配置
- 2018年广发证券信息技术部面试总结
- 数据分析在微博营销中的应用
- Excel拆分同一单元格的两行内容为两行(备忘记录)
- 计算机实际上是如何工作的
- 一个蚂蚁曾经的辛酸面试历程
- 桌面路径不小心改成磁盘根目录改不回去解决方案
- Error:Kotlin: Module was compiled with an incompatible version of Kotlin. Th
- sqlyog怎么连接mysql_Windows Server系统部署MySQL数据库
- [Android]全球6亿人都在用的修图神器,PicsArt专业直装版
热门文章
- 关于Python中的错误与异常,你是否了解的够仔细?
- 使用Python编写打字训练小程序
- 野生前端的数据结构练习(11)动态规划算法
- 【Python3网络爬虫开发实战】1.2.4-GeckoDriver的安装
- java中 与%_java中“/”与“%”的区别
- Linux openJDK执行javac编译java文件提示command not found
- 某东商城获取eid和fp参数方法
- android权限机制6.0,Android6.0权限机制(二):封装
- java数组深拷贝和浅拷贝_java List复制:浅拷贝与深拷贝
- 无线文件服务器,文件共享新方法 无线网络文件共享设置