P2024 [NOI2001] 食物链(并查集)

Posted SSL_LKJ

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了P2024 [NOI2001] 食物链(并查集)相关的知识,希望对你有一定的参考价值。

食物链

题目传送门
在这里插入图片描述

解题思路

这题可以用扩展域并查集
分别是:
同类
捕食
天敌

AC代码

#include<cstdio>
using namespace std;
int n,k,ans,f[50005*3];
int find(int x)
{
	if(f[x]==x)return x;
	return f[x]=find(f[x]);
}
int main()
{
	scanf("%d%d",&n,&k);
	for(int i=1;i<=3*n;i++)f[i]=i;
	for(int i=1;i<=k;i++)
	{
		int type,x,y;
		scanf("%d%d%d",&type,&x,&y);
		if(x>n||y>n||(type==2&&x==y)){ans++;continue;}//特殊
		int x1=find(x),y1=find(y),x2=find(x+n),y2=find(y+n),x3=find(x+n*2),y3=find(y+n*2);//找祖先
		if(type==1)//不同情况
		{
			if(x2!=y1&&x3!=y1)f[x1]=y1,f[x2]=y2,f[x3]=y3;
			else ans++;
		}
		else
		{
			if(x1!=y1&&x3!=y1)f[x1]=y3,f[x2]=y1,f[x3]=y2;
			else ans++;
		}
	}
	printf("%d",ans);
	return 0;
}

谢谢

以上是关于P2024 [NOI2001] 食物链(并查集)的主要内容,如果未能解决你的问题,请参考以下文章

Noi2001 食物链(扩展域并查集)

NOI2001|POJ1182食物链[种类并查集 向量]

NOI 2001 食物链 /// 并查集 oj22035

洛谷 P2024 食物链 POJ 1182 Label:并查集Turbo

Luogu P2024 食物链

进阶——细赏并查集