食物链_KEY
食物链
(eat.pas/c/cpp)
【 问题描述】
动物王国中有三类动物 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 和 K 句话, 输出假话的总数。
【 输入格式】
第一行两个整数 N 和 K。
以下 K 行每行三个正整数 D, X, Y, 以空格隔开, 其中 D 表示说法的种类。
若 D=1, 则表示 X 和 Y 是同类。
若 D=2, 则表示 X 吃 Y。
【 输出格式】
一个整数, 表示假话数。
【 样例输入】
100 7
1 101 1
2 1 2
2 2 3
2 3 3
1 1 3
2 3 1
1 5 5
【 样例输出】
3
【 数据范围】
七句话分别是: 假、 真、 真、 假、 假、 真、 真。
对于 100%的数据 1<=N<=50000, 0<=K<=100000。
——————————————————————————————————————
这道题的标算是并查集。
但是我们要怎么并查集呢?
这里需要一个很巧妙的技巧,那就是开一个三倍的并查集数组(或者是三个)。
第一个存储i的同类,第二个存储i吃的,第三个存储吃i的。
如果读入的x,y是同类,那么x的同类也就是y的同类(此处进行合并集合操作),x吃的y也吃,吃x的也吃y。
那么x吃y也是一样了。
code:
for(int i=;i<=k;i++)
{
int c=read(),x=read(),y=read();
if(x>n || y>n)
{
ans++;
continue;
}
if(c==)
{
if(getf(x+n)==getf(y) || getf(x+n*)==getf(y))
{
ans++;
continue;
}
fa[getf(y)]=getf(x);
fa[getf(y+n)]=getf(x+n);
fa[getf(y+n*)]=getf(x+n*);
}
else
{
if(getf(x)==getf(y) || getf(x+n*)==getf(y))
{
ans++;
continue;
}
fa[getf(y)]=getf(x+n);
fa[getf(y+n)]=getf(x+n*);
fa[getf(y+n*)]=getf(x);
}
}
食物链_KEY的更多相关文章
- 关押罪犯 and 食物链(并查集)
题目描述 S 城现有两座监狱,一共关押着N 名罪犯,编号分别为1~N.他们之间的关系自然也极不和谐.很多罪犯之间甚至积怨已久,如果客观条件具备则随时可能爆发冲突.我们用"怨气值"( ...
- NOI2001|POJ1182食物链[种类并查集 向量]
食物链 Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 65430 Accepted: 19283 Description ...
- tyvj1202 数数食物链
描述 TsyD学习了生物的生态环境那一张后,老师留了一项作业,就是给一张食物网,求所有食物链的总数.(从最低营养级生物(它不能吃任何其他的生物)开始到最高营养级(它不能被任何其他生物吃) 叫做一条食物 ...
- vijos1531 食物链
背景 安徽省芜湖市第二十七中学测试题 NOI 2001 食物链(eat) Description:OfficialData:OfficialProgram:JackDavid127 描述 动物王国中有 ...
- poj1182食物链_并查集_挑战程序设计竞赛例题
食物链 Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 65534 Accepted: 19321 Description ...
- BZOJ4562: [Haoi2016]食物链
Description 如图所示为某生态系统的食物网示意图,据图回答第1小题 现在给你n个物种和m条能量流动关系,求其中的食物链条数. 物种的名称为从1到n编号 M条能量流动关系形如 a1 b1 a2 ...
- [poj1182]食物链(并查集+补集)
食物链 Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 64841 Accepted: 19077 Description ...
- [并查集] POJ 1182 食物链
食物链 Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 66294 Accepted: 19539 Description ...
- 【BZOJ-4562】食物链 记忆化搜索(拓扑序 + DP)
4562: [Haoi2016]食物链 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 133 Solved: 112[Submit][Status] ...
随机推荐
- 最详细的Vue Hello World应用开发步骤
很多Vue的初学者想尝试这个框架时,都被webpack过于复杂的配置所吓倒,导致最后无法跑出一个期望的hello word效果.今天我就把我第一次使用webpack打包一个Vue Hello Worl ...
- linux自动备份oracle数据库
#此脚本只备份数据表,而且为了方便恢复数据是做的单表逐个备份#在写脚本过程中遇到的报错均加入了解决方案的链接(虽然错误代码没有贴出来)#最终将在脚本所在目录生成年月日-时分的目录,目录下为表名.dmp ...
- PHP代码的多继承 -》 PHP代码复用新的姿势 trait
本文参考: http://php.net/language.oop5.traits 一.什么是trait 从PHP 5.4.0 开始 PHP 实现了一种新的代码复用方式 trait. 二.trait ...
- .ne 基础(2)
类是一种抽象 抽象的概念,具体的实例. 现实是先有对象,再抽象成类,再用类来创建实例 构造方法 (1)如果写好了类,不写构造方法,系统会默认一个无参的构造方法 (2) 如果手动添加了一个 构造方法,就 ...
- 生成并部署SSH key
1.如何生成ssh公钥 你可以按如下命令来生成 sshkey: ssh-keygen -t rsa -C "xxxxx@xxxxx.com" # Generating public ...
- PCA算法的最小平方误差解释
PCA算法另外一种理解角度是:最小化点到投影后点的距离平方和. 假设我们有m个样本点,且都位于n维空间 中,而我们要把原n维空间中的样本点投影到k维子空间W中去(k<n),并使得这m个点到投影点 ...
- rnnlm学习
rnn-lm: 1.论文 2.公式推导 2.1 http://blog.csdn.net/a635661820/article/details/44462315 3. 工具 lstm-lm 1. 论文 ...
- UVALive4682 XOR Sum
UVALive4682 XOR Sum 题意 给定一个数组, 求连续子序列中异或值最大的值. 题解 假设答案区间为 [L, R], 则答案为 XOR[L, R], 可以将区间分解为 XOR[L,R] ...
- ARC声明属性关键字详解(strong,weak,unsafe_unretained,copy)
ARC声明属性关键字详解(strong,weak,unsafe_unretained,copy) 在iOS开发过程中,属性的定义往往与retain, assign, copy有关,我想大家都很熟悉了, ...
- ARM Linux 内核 panic 之cache 一致性 ——Cortex-A9多核cache和TLB一致性广播
ARM Linux 内核 panic 之cache 一致性 ——Cortex-A9多核cache和TLB一致性广播 Cortex-A9的多喝CPU可以接收和执行一致性广播操作,当其使能并处于SMP模式 ...