【luogu P2024 食物链】 题解
题目链接:https://www.luogu.org/problemnew/show/P2024
摘吊打集训队的九日dalao一句话
关于带有多个相对集合的全集,我们可以多开几倍的空间。每一倍的元素表示这个当前里的相对元素
那么这道题,既然只有三种关系,我们就可以搞三个并查集来记录不同的关系。
我们令fa[i]表示自己本身,fa[i+n]表示猎物,fa[i+n+n]表示天敌。
接着就是对这道题的处理:
首先,吐槽一句,这nm什么xjb食物链。。明明是个环。。
其次,吐槽两句,这nm为什么无脑相信前面的话。。总觉得很没有理性思维啊。。

生产者主要是绿色植物,能用无机物制造营养物质的自养生物,这种功能就是光合作用,也包括一些化能细菌(如硝化细菌),它们同样也能够以无机物合成有机物,生产者在生态系统中的作用是进行初级生产或称为第一性生产,因此它们就是初级生产者或第一性生产者,其产生的生物量称为初级生产量或第一性生产量。生产者的活动是从环境中得到二氧化碳和水,在太阳光能或化学能的作用下合成碳水化合物(以葡萄糖为主)。因此太阳辐射能只有通过生产者,才能不断的输入到生态系统中转化为化学能力即生物能,成为消费者和分解者生命活动中唯一的能源。
营养级结构 生植物如桑寄生、槲寄生等,由于能自己制造食物,所以属于生产者。而杂食类消费者是介于食草性动物和食肉性动物之间的类型,既吃植物,又吃动物,如鲤鱼、熊等。人的食物也属于杂食性。这些不同等级的消费者从不同的生物中得到食物,就形成〝营养级〞。
#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
const int maxn = ;
int fa[maxn], n, k, ans;
int find(int x)
{
return fa[x] == x?fa[x]:fa[x] = find(fa[x]);
}
void unionn(int x, int y)
{
int r1 = find(x);
int r2 = find(y);
if(r1 != r2)
fa[r2] = r1;
}
int main()
{
scanf("%d%d",&n,&k);
int a,b,c;
int nn = n*;
for(int i = ; i <= n*; i++)
{
fa[i] = i;
}
while(k--)
{
scanf("%d%d%d",&a,&b,&c); if(b>n||c>n)
{
ans++;
continue;
} if(a == )
{
if(find(b+n) == find(c) || find(b+nn) == find(c))
{
ans++;
continue;
}
unionn(b,c);unionn(b+n,c+n);unionn(b+nn,c+nn);//b,c是同类,那么就什么都是一样的。
}
if(a == )
{
if(b==c)
{
ans++;
continue;
}
if(find(b) == find(c)||find(b+nn) == find(c))
{
ans++;
continue;
}
unionn(b,c+nn);unionn(b+n,c);unionn(b+nn,c+n);//b吃c,c的天敌是b,b的猎物是c,b的天敌就是c的猎物。
}
}
printf("%d",ans);
return ;
}
【luogu P2024 食物链】 题解的更多相关文章
- luogu P2024 食物链
题目描述 动物王国中有三类动物 A,B,C,这三类动物的食物链构成了有趣的环形.A 吃 B,B 吃 C,C 吃 A. 现有 N 个动物,以 1 - N 编号.每个动物都是 A,B,C 中的一种,但是我 ...
- 【Luogu P2024&P1892】食物链&团伙(并查集拓展域)
Luogu P1892 Luogu P2024 这两道一眼看过去很容易发现可以用并查集来做--但是当我们仔细阅读题面后,会发现其实并没有那么简单. 我们知道并查集可以很轻松地维护具有传递性的信息,也就 ...
- [Luogu 2024] 食物链
[Luogu 2024] 食物链 几句随感 我依稀记得联赛前本来想做这题的时候. 当年啊弱到题目与标签就令我望而生畏. 还有翻阅很多遍那现在已经被遗弃的博客. 看到题解中「三倍数组」的字眼就怕难而放弃 ...
- P2024 食物链
题面:P2024 食物链 emmm其实不太难想 开三倍的数组 1~n:是当前动物的同类 n~2*n:是当前动物吃的动物 2*n~3*n:是吃当前动物的动物 emmmm #include<iost ...
- Luogu P2024 [NOI2001]食物链
并查集 首先先要读懂题目,a是b的食物的话,b的天敌是a,b的食物是a的天敌 比如,人吃鸡,鸡吃草,那么草吃人..... 所以建3个并查集,+n时表示这是其食物,+2*n时表示这是其天敌 所以当x,y ...
- Luogu P2024 [NOI2001]食物链 | 并查集
题目链接 思路:并查集,因为一开始我们并不知道每一只动物是哪一个种类的,所以我们干脆建立三倍于n的空间,1~n这三分之一用来存第i只动物是A的情况,n+1~2n这三分之一用来存第(i-n)只动物是B的 ...
- 洛谷P2024食物链——并查集补集的灵活运用
题目:https://www.luogu.org/problemnew/show/P2024 自己在做本题时最大的障碍就是:不会在一个集合的father改变时把相应的补集也跟着改变. 借鉴题解后,才明 ...
- P2024 食物链(种类并查集)
P2024 [NOI2001]食物链 题目描述 动物王国中有三类动物 A,B,C,这三类动物的食物链构成了有趣的环形.A 吃 B,B吃 C,C 吃 A. 现有 N 个动物,以 1 - N 编号.每个动 ...
- 洛谷P2024 食物链
挺神奇 题目描述 动物王国中有三类动物 A,B,C,这三类动物的食物链构成了有趣的环形.A 吃 B,B 吃 C,C 吃 A. 现有 N 个动物,以 1 - N 编号.每个动物都是 A,B,C 中的一种 ...
随机推荐
- Android:Sqlitedatabase学习小结
今天刚刚学习完Sqlite数据库的基础知识,随即把学到的东西记录下来,以便随后查阅,以下是自己对Sqlite数据库的小结:1.Sqlite简介 Sqlite是一款轻型的数据库,它包含在一个 ...
- C#下查找并杀死子进程(进程树)
参考:如何杀死进程及子进程 /** * 传入参数:父进程id * 功能:根据父进程id,杀死与之相关的进程树 */ public static void KillProcessAndChildren( ...
- 九度oj题目1518:反转链表
题目1518:反转链表 时间限制:1 秒 内存限制:128 兆 特殊判题:否 提交:2567 解决:948 题目描述: 输入一个链表,反转链表后,输出链表的所有元素.(hint : 请务必使用链表) ...
- windows下openssl config failed
老大让我们去学学webpack, 我在一开始就遇到了坎, 调侃自己"webpack从入门到放弃", 在windows下, 报错是"openssl config faile ...
- UWP 应用获取各类系统、用户信息 (1) - 设备和系统的基本信息、应用包信息、用户数据账户信息和用户账户信息
应用开发中,开发者时常需要获取一些系统.用户信息用于数据统计遥测.问题反馈.用户识别等功能.本文旨在介绍在 Windows UWP 应用中获取一些常用系统.用户信息的方法.示例项目代码可参见 Gith ...
- sql时间区间查询性能测试
这个测试针对"一个月"的区间来查询数据.分datetime类型和nvachar类型. 先比较datetime类型: 一.datediff函数 declare @beginTime ...
- MyEclipse 中tomcat 调试时进入未打断点的代码
在preferences里面取消挂起未捕获异常
- File I/O 小结
1 .I/0: input/output 2.java.io.File 3 .表示:文件或者文件夹(目录) 4. File f = new File("文件路径"); 5 .注意: ...
- Web前端面试指导(七):入职后的建议
7.2 关于合同 签合同的时候,看公司要求,有些是3年,有些是5年,不要怕,签了就是了,真到想走的时候,提前说一声,随时可以走,不存在什么违约赔偿. 注意:你的合同和薪资都是属于保密的,不能让公司其他 ...
- ES6新增的math,Number方法
ES6新增的math,Number方法,下面总结了一些我觉得有用的 Nunber.isInteger()判断是否为整数,需要注意的是1,和1.0都会被认为是整数 console.log(Number. ...