首页 > TAG信息列表 > P2024
洛谷 P2024 食物链
题目传送门:https://www.luogu.com.cn/problem/P2024 一般的并查集只能用来解决”亲戚的亲戚是亲戚“这类问题,但是如果关系变得复杂就不好解决。 比如”敌人的敌人是朋友“这类的问题,很明显普通的并查集无法解决,这个时候我们就要用到普通并查集的进阶版——种类并查集。 一般的[AcWing 240] && P2024 [NOI2001] 食物链
点击查看代码 #include<iostream> using namespace std; const int N = 5e5 + 10; int p[N], d[N]; int find(int x) { if (p[x] != x) { int u = find(p[x]); d[x] += d[p[x]]; p[x] = u; } return p[x]; } int main() { int n, k;P2024 [NOI2001] 食物链
题面 动物王国中有三类动物 A,B,C,这三类动物的食物链构成了有趣的环形。A 吃 B,B 吃 C,C 吃 A。 现有 N 个动物,以 1 - N 编号。每个动物都是 A,B,C 中的一种,但是我们并不知道它到底是哪一种。 有人用两种说法对这 N 个动物所构成的食物链关系进行描述: 第一种说法是 1 X Y,表示 X 和 Y洛谷P2024 Solution
题目链接 题解 因为提供的描述仅为动物间的关系,而无法确定动物的种类。可以开一个原数组3倍的并查集,分别表示A,B,C3类,每类中都有全部\(n\)个动物。例如A类中的动物\(x\)表示\(x\)为A类动物的信息,将可以相互推理得出的信息用并查集链接。对于同类的描述,如果\(x,y\)之间存在捕食关系P2024 [NOI2001]食物链(洛谷)
题目传送门 核心解法(并查集): 关键要理清楚这些关系是怎样的:即通过了解题意可知:假设现在有如下三种动物类型:老虎,老虎的食物,老虎的天敌。所输入的x y都只满足这三种类型(输入m次去判断关系),x y是两个独立的未知种类的动物(即不知道是老虎本体、食物还是天敌)。现在需要通P2024 NOI2001 种类冰茶鸡
展开 题目描述 动物王国中有三类动物 A,B,C,这三类动物的食物链构成了有趣的环形。A 吃 B,B 吃 C,C 吃 A。 现有 N 个动物,以 1 - N 编号。每个动物都是 A,B,C 中的一种,但是我们并不知道 它到底是哪一种。 有人用两种说法对这 N 个动物所构成的食物链关系进行描述: 第一种说法是“1洛谷P2024 [NOI2001]食物链 题解 并查集
题目链接:https://www.luogu.com.cn/problem/P2024 解题思路: 我们用 \(X+n\) 来表示 吃 \(X\) 的集合,用 \(X+2n\) 来表示被 \(X\) 吃的集合,同时可以推导出 \(X+2n\) 是吃 \(X+n\) 的。 遇到“1 X Y”,则说明需要: 合并 \(X\) 和 \(Y\); 合并 \(X+n\) 和 \(Y+n\); 合并 \(X+2n\) 和 \(YLuogu P2024 [NOI2001]食物链
并查集 首先先要读懂题目,a是b的食物的话,b的天敌是a,b的食物是a的天敌 比如,人吃鸡,鸡吃草,那么草吃人。。。。。 所以建3个并查集,+n时表示这是其食物,+2*n时表示这是其天敌 所以当x,y是同类当且仅当x的食物不是y,且x的天敌不是y 当x吃y当且仅当x和y不是同类,y的食物不是x 然后并查集维护即P2024 [NOI2001]食物链
题目描述 动物王国中有三类动物 A,B,C,这三类动物的食物链构成了有趣的环形。A 吃 B,B 吃 C,C 吃 A。 现有 N 个动物,以 1 - N 编号。每个动物都是 A,B,C 中的一种,但是我们并不知道 它到底是哪一种。 有人用两种说法对这 N 个动物所构成的食物链关系进行描述: 第一种说法是“1 X Y”,表示