食物链(转自yekehe2002大神)

2024-02-04 12:18

本文主要是介绍食物链(转自yekehe2002大神),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

食物链

(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=1;i<=k;i++)
{
int c=read(),x=read(),y=read();
if(x>n || y>n)
{
ans++;
continue;
}
if(c==1)
{
if(getf(x+n)==getf(y) || getf(x+n*2)==getf(y))
{
ans++;
continue;
}
fa[getf(y)]=getf(x);
fa[getf(y+n)]=getf(x+n);
fa[getf(y+n*2)]=getf(x+n*2);
}
else
{
if(getf(x)==getf(y) || getf(x+n*2)==getf(y))
{
ans++;
continue;
}
fa[getf(y)]=getf(x+n);
fa[getf(y+n)]=getf(x+n*2);
fa[getf(y+n*2)]=getf(x);
}
}

这篇关于食物链(转自yekehe2002大神)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/677472

相关文章

poj 1182 并查集 食物链类

题意: 有n只动物,分别编号1....n。所有动物都属于A,B,C中的一种,已知A吃B,B吃C,C吃A。 按顺序给出下面两种共K条信息: 1. x 和 y 属于同一类。 2. x 吃 y 。 然而这些信息可能会出错,有可能有的信息和之前给出的信息矛盾,也有的信息可能给出的 x 和 y 不在n的范围内。 求k条信息中有多少条是不正确的。 解析: 对于每只动物,创建3个元素 i

【python 图像识别】图像识别从菜鸟走向大神系列1

无意中发现了一个巨牛的人工智能教程,忍不住分享一下给大家。教程不仅是零基础,通俗易懂,而且非常风趣幽默,像看小说一样!觉得太牛了,所以分享给大家。点这里可以跳转到教程。人工智能教程 一、安装配置(python2.7) 1.pip install pytesseract2、pip install pyocr3、pip install pillow4、安装tesseract-ocr:http

【hh大神的】Tarjan + 缩点 模板

此模板来自 notonlysuccess 原文链接: http://www.notonlysuccess.com/index.php/tarjan/ 大神就是吊啊。 不多说了,想学tarjan ,资料网上是有一堆的 怎么说。。我现在理解的还不算太透彻,但用模板总行吧 这里只存一下模板 使用时注意清空和存图! (基于个人习惯,稍微有些小改动) #define

编程要由“手动挡”变“自动挡”了?Cursor+Claude-3.5-Sonnet,Karpathy大神点赞的AI代码神器!如何使用详细教程

Cursor情况简介 AI大神Andrej Karpathy都被震惊了!他最近在试用 VS Code Cursor +Claude Sonnet 3.5,结果发现这玩意儿比GitHub Copilot还好用! Cursor在短短时间内迅速成为程序员群体的顶流神器,其背后的原因在于其默认使用OpenAI投资的Claude-3.5-Sonnet模型,这一举动不仅改变了代码生成领域的格局,也为程序员

Android Canvas 和Paint的用法 转自http://blog.csdn.net/u010947098/article/details/44574171

首先,介绍的是Canvas的基本方法 方法签名简要说明drawArc(RectF oval, float startAngle, float sweepAngle, boolean useCenter, Paint paint)绘制弧drawBitmap(Bitmap bitmap, Rect src, Rect dst,Paint paint)在指定点绘制从源位图中"挖取"的一块drawBi

黑神话:悟空42项属性修改器中文版风灵月影大神制作

黑神话悟空大家玩上没有? 今天给大家奉上由风灵月影大神制作的修改器,自带简体中文,这下女友再也不会说为什么只有一个怪了。。。 你要问我好不好玩?我得先问问我订的 10 年后的 4090 还有几年能到?是不是到时候就停产了,或者被国产显卡取代了。。。 显卡给力的就支持下正版吧,毕竟这是我国第一款真正的 3A 大作,这种热度,估计不仅前无古人,应该也后无来者了。 立即下载:【chumenx

poj1182 食物链 (种类并查集)

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

编程之美测试赛第二题—大神与三位小伙伴

大神与三位小伙伴 时间限制: 2000ms 单点时限: 1000ms 内存限制: 256MB 描述 给定2个树A和B,保证A的节点个数>=B的节点个数。 现在你需要对树A的边进行二染色。 一个好的染色方案,指不存在一个树A中的连通块,同时满足以下2个条件 1. 其中只有同色的边 2. 和B同构。两个树同构是指,存在一个一一映射(既是单射又是满射),将树B的各节点映

codevs 1074食物链 并查集

a和b之间有三种关系,a和b同类,a吃b,b吃a,用a+n表示a吃的,a+2*n表示吃a的。与关押犯人一样,但这里要影射出2种虚拟的才足以表示出关系。 #include<cstdio>#include<iostream>using namespace std;int n,k,d,x,y;int fa[200000];int find(int x){return x==fa[x]?