题目链接:https://www.luogu.org/problemnew/show/P2024

摘吊打集训队的九日dalao一句话

关于带有多个相对集合的全集,我们可以多开几倍的空间。每一倍的元素表示这个当前里的相对元素

那么这道题,既然只有三种关系,我们就可以搞三个并查集来记录不同的关系。

我们令fa[i]表示自己本身,fa[i+n]表示猎物,fa[i+n+n]表示天敌。

接着就是对这道题的处理:

首先,吐槽一句,这nm什么xjb食物链。。明明是个环。。

其次,吐槽两句,这nm为什么无脑相信前面的话。。总觉得很没有理性思维啊。。

百度百科对食物链的解释:
生态系统中的生物种类繁多,并且在生态系统分别扮演着不同的角色,根据它们在能量和物质运动中所起的作用,可以归纳为生产者、消费者和分解者三类。

生产者主要是绿色植物,能用无机物制造营养物质的自养生物,这种功能就是光合作用,也包括一些化能细菌(如硝化细菌),它们同样也能够以无机物合成有机物,生产者在生态系统中的作用是进行初级生产或称为第一性生产,因此它们就是初级生产者或第一性生产者,其产生的生物量称为初级生产量或第一性生产量。生产者的活动是从环境中得到二氧化碳和水,在太阳光能或化学能的作用下合成碳水化合物(以葡萄糖为主)。因此太阳辐射能只有通过生产者,才能不断的输入到生态系统中转化为化学能力即生物能,成为消费者和分解者生命活动中唯一的能源。

消费者属于异养生物,指那些以其他生物或有机物为食的动物。根据食性不同,可以区分为食草动物和食肉动物两大类。食草动物称为第一级消费者,它们吞食植物而得到自己需要的食物和能量,这一类动物如一些昆虫、鼠类、野猪一直到象。食草动物又可被食肉动物所捕食,这些食肉动物称为第二级消费者,如瓢虫以蚜虫为食,黄鼠狼吃鼠类等,这样,瓢虫和黄鼠狼等又可称为第一级食肉者。又有一些捕食小型食肉动物的大型食肉动物如狐狸、狼、蛇等,称为第三级消费者或第二级食肉者。又有以第二级食肉动物为食物的如狮、虎、豹、鹰、鹫等猛兽猛禽,就是第四级消费者或第三级食肉者。此外,寄生物是特殊的消费者,根据食性可看作是草食动物或食肉动物。但某些寄

营养级结构

生植物如桑寄生、槲寄生等,由于能自己制造食物,所以属于生产者。而杂食类消费者是介于食草性动物和食肉性动物之间的类型,既吃植物,又吃动物,如鲤鱼、熊等。人的食物也属于杂食性。这些不同等级的消费者从不同的生物中得到食物,就形成〝营养级〞。

由于动物不只是从一个营养级的生物中得到食物,如第三级食肉者不仅捕食第二级食肉者,同样也捕食第一级食肉者和食草者,所以它属于几个营养级。而最后达到人类是最高级的消费者,他不仅是各级的食肉者,而且又以植物作为食物。所以,各个营养级之间的界限是不明显的。
实际在自然界中,每种动物并不是只吃一种食物。因此形成一个复杂的食物链网。
分解者也是异养生物,主要是各种细菌和真菌,也包括某些原生动物及腐食性动物如食枯木的甲虫、白蚁,以及蚯蚓和一些软体动物等。它们把复杂的动植物残体分解为简单的化合物,最后分解成无机物归还到环境中去,被生产者再利用。分解者在物质循环和能量流动中具有重要的意义,因为大约有90% 的陆地初级生产量都必须经过分解者的作用而归还给大地,再经过传递作用输送给绿色植物进行光合作用。所以分解者又可称为还原者。
 
那么我们看,假话就那么几种情况:
如果1和2是同类,那么要是在之前1和2有过猎物或者天敌关系,则为假。
如果1吃2,那么要是在之前1被2吃掉或者1和2是同类,则为假。
还有就是题目里裸裸的假话情况。
那么,我们还需要维护几种关系:
如果是同类,那么他们的天敌和猎物都是一样的。
如果是猎物,那么猎物的猎物就是天敌。
如果是天敌,那么天敌的天敌就是猎物。
 
 #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 食物链】 题解的更多相关文章

  1. luogu P2024 食物链

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

  2. 【Luogu P2024&P1892】食物链&团伙(并查集拓展域)

    Luogu P1892 Luogu P2024 这两道一眼看过去很容易发现可以用并查集来做--但是当我们仔细阅读题面后,会发现其实并没有那么简单. 我们知道并查集可以很轻松地维护具有传递性的信息,也就 ...

  3. [Luogu 2024] 食物链

    [Luogu 2024] 食物链 几句随感 我依稀记得联赛前本来想做这题的时候. 当年啊弱到题目与标签就令我望而生畏. 还有翻阅很多遍那现在已经被遗弃的博客. 看到题解中「三倍数组」的字眼就怕难而放弃 ...

  4. P2024 食物链

    题面:P2024 食物链 emmm其实不太难想 开三倍的数组 1~n:是当前动物的同类 n~2*n:是当前动物吃的动物 2*n~3*n:是吃当前动物的动物 emmmm #include<iost ...

  5. Luogu P2024 [NOI2001]食物链

    并查集 首先先要读懂题目,a是b的食物的话,b的天敌是a,b的食物是a的天敌 比如,人吃鸡,鸡吃草,那么草吃人..... 所以建3个并查集,+n时表示这是其食物,+2*n时表示这是其天敌 所以当x,y ...

  6. Luogu P2024 [NOI2001]食物链 | 并查集

    题目链接 思路:并查集,因为一开始我们并不知道每一只动物是哪一个种类的,所以我们干脆建立三倍于n的空间,1~n这三分之一用来存第i只动物是A的情况,n+1~2n这三分之一用来存第(i-n)只动物是B的 ...

  7. 洛谷P2024食物链——并查集补集的灵活运用

    题目:https://www.luogu.org/problemnew/show/P2024 自己在做本题时最大的障碍就是:不会在一个集合的father改变时把相应的补集也跟着改变. 借鉴题解后,才明 ...

  8. P2024 食物链(种类并查集)

    P2024 [NOI2001]食物链 题目描述 动物王国中有三类动物 A,B,C,这三类动物的食物链构成了有趣的环形.A 吃 B,B吃 C,C 吃 A. 现有 N 个动物,以 1 - N 编号.每个动 ...

  9. 洛谷P2024 食物链

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

随机推荐

  1. 牛客网Java刷题知识点之垃圾回收算法过程、哪些内存需要回收、被标记需要清除对象的自我救赎、对象将根据存活的时间被分为:年轻代、年老代(Old Generation)、永久代、垃圾回收器的分类

    不多说,直接上干货! 首先,大家要搞清楚,java里的内存是怎么分配的.详细见 牛客网Java刷题知识点之内存的划分(寄存器.本地方法区.方法区.栈内存和堆内存) 哪些内存需要回收 其实,一般是对堆内 ...

  2. 1.2 js基础

    1.onchange    99%用到select上边. 2.js是干什么的,修改css样式和属性   3.选项卡步骤   1.获取元素 2.循环给按钮加自定义属性 3.循环给按钮加事件   4.封装 ...

  3. markdown语法简单总结

    最常用的十个MarkDown语法总结: 标题:只要在这段文字前加 # 号即可 # 一级标题 最大 ## 二级标题 ### 三级标题 无序列表:在文字前加上 - 或 * 有序列表:在文字前加1. 2.  ...

  4. HTML5 总结 (1)

    HTML5新表单 1.Input 新类型:email  url  tel number range date color date week month....... <html> < ...

  5. sql时间区间查询性能测试

    这个测试针对"一个月"的区间来查询数据.分datetime类型和nvachar类型. 先比较datetime类型: 一.datediff函数 declare @beginTime ...

  6. mysql主从复制报错 :Incorrect usage of DB GRANT and GLOBAL PRIVILEGES

    在配置mysql主从复制时,想通过 grant replication slave on bbs.* to 'bbs'@'192.168.1.3' identified by '123456'; 来限 ...

  7. Vue element-ui:滚动条 分页 禁用选项

    1.滚动条设置: <el-scrollbar style="height:100%;">.......</el-scrollbar> 默认会同时出现水平和垂 ...

  8. 【Android】2.0 Android开发环境的搭建——Eclipse

    1.0 eclipse,这可不算谷歌开发的,是IBM公司开发的,而且是Java语言写的 2.0 eclipse怎么下.百度“eclipse”,进入eclipse官网 然后,瞎几把下吧……,实在不行百度 ...

  9. SharePoint - JavaScript Variable & Functions

    1. MSOWebPartPageFormName 获取当前form的名称,然后可用document.forms[MSOWebPartPageFormName]来得到当前form: 2. _spPag ...

  10. ArcEngine开发鹰眼实现问题

    在网上百度一下有关AE鹰眼实现的代码,基本是一样的,可问题是好多代码自己运行起来鹰眼却总是加不进地图.住视图axMapControl1.OnMapReplaced(),axMapControl1.On ...