poj 1182 (关系并查集) 食物链
题目传送门:http://poj.org/problem?id=1182
这是一道关系型并查集的题,对于每个动物来说,只有三种情况:同类,吃与被吃;
所以可以用0,1,2三个数字代表三种情况,在使用并查集的时候再多加一个关系数组,初始时全部赋值为0
然后就是在进行并查集的每一步时加入关系的改变,
如果祖先节点相同,说明两者之间的关系已经出现,是已知的,判断两者关系之和与给的d-1是否相同
祖先节点不同,说明在此之前两者的关系还未知,就赋予关系
噢 对了 poj 上的这题要单组输入,多组会wa
code
#include<cstdio>
using namespace std;
int father[];
int relat[];
void give (int n)
{
for (int i=;i<=n;i++)
{
father[i]=i;
relat[i]=; //初始关系都为0
}
}
int find(int x)
{
if (x==father[x]) return father[x];
int t=find(father[x]);
relat[x]=(relat[x]+relat[father[x]])%; //在寻找祖先节点的过程中也要更新关系
father[x]=t;
return father[x];
}
int main()
{
int n,k,sum,d,x,y,sx,sy;
scanf("%d %d",&n,&k);
give(n);
sum=;
while (k--)
{
scanf("%d %d %d",&d,&x,&y);
if (x>n||y>n)
{
sum++;
continue;
}
if (d==&&x==y) //不能自己吃自己啊
{
sum++;
continue;
}
sx=find(x);
sy=find(y);
if (sx==sy) //说明关系可以确定,因为在之前出现过
{
if ((relat[x]-relat[y]+)%!=d-) //加三为了避免负数
sum++;
}
else //关系还不确定,那么不能判断,只能赋予关系
{
father[sx]=sy;
relat[sx]=(relat[y]-relat[x]++d-)%; //sx,sy,x,y的顺序不要反了,这都是对应的
}
}
printf("%d\n",sum);
return ;
}
poj 1182 (关系并查集) 食物链的更多相关文章
- poj 2492(关系并查集) 同性恋
题目;http://poj.org/problem?id=2492 卧槽很前卫的题意啊,感觉节操都碎了, t组测试数据,然后n,m,n条虫子,然后m行,每行两个数代表a和b有性行为(默认既然能这样就代 ...
- Poj(1182),种类并查集
题目链接:http://poj.org/problem?id=1182 再次熟练种类并查集,又积累点经验,和技巧,rank 0 2 1 先计算father[x] ,再更新rank[x]; #inclu ...
- Find them, Catch them(POJ 1703 关系并查集)
Find them, Catch them Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 38668 Accepted: ...
- poj 1182 (扩展并查集)
食物链 Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 58979 Accepted: 17247 Description ...
- 又见关系并查集 以POJ 1182 食物链为例
简单的关系并查集一般非常easy依据给出的关系搞出一个有向的环,那么两者之间的关系就变成了两者之间的距离. 对于此题: 若u.v不在一个集合内,则显然此条语句会合法(暂且忽略后两条.下同). 那么将f ...
- poj 1182 食物链(关系并查集)
食物链 Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 62824 Accepted: 18432 Description ...
- ACM/ICPC 之 并查集-食物链(POJ1182)
并查集的经典题型,POJ上题目还是中文= =,一般看到中文题都会感觉不太简单,这道题的数学归纳用得比较多,可以简化代码,挺有意思的. 同类型的题目还有POJ1703,比这个要简单,想了解并查集基本介绍 ...
- POJ 2492 (简单并查集) A Bug's Life
题意:有编号为1~n的虫子,开始假设这种昆虫是异性恋.然后已知xi 和 yi进行交配,根据已知情况分析能否推理出其中是否有同性恋 这道题和 POJ 1182 食物链 十分相似,不过在更新与父节点关系的 ...
- [POJ 2588]--Snakes(并查集)
题目链接:http://poj.org/problem?id=2588 Snakes Time Limit: 1000MS Memory Limit: 65536K Description B ...
随机推荐
- C:\\MFC控件大小随窗体大小而改变
一.大小和位置都改变 1.首先为窗体类添加CRect m_rect,该成员变量用来记录窗体的当前大小. 2.在类向导里面(Ctrl+W),为窗体添加消息WM_SIZE的响应函数OnSize(): 注意 ...
- 吴裕雄 python深度学习与实践(5)
import numpy as np data = np.mat([[1,200,105,3,False], [2,165,80,2,False], [3,184.5,120,2,False], [4 ...
- gradle 很好用的么
Gradle 其实是很好用的 2017, Apr 14 by Tesla Ice Zhang Gradle 是一款使用 Kotlin (划掉) Groovy 编写的 JVM 构建工具,其易用性和 Ma ...
- Java的学习01
记录每天的学习情况.加油. /** * 测试包装类 * @author 小白 * */ public class TestWrappedClass { public static void main( ...
- Webpack Getting Started
[Webpack Getting Started] Make sure you have a fresh version of Node.js installed. If you are using ...
- DRDS 概述
DRDS 概述 更新时间:2017-08-04 13:53:50 分布式关系型数据库服务(Distributed Relational Database Service , 简称 DRDS ) ...
- hibernate mysql视图操作
hibernate对视图操作,首先建立数据库视图 视图v_invite: create view pintu.v_invite asselect cp.user_id as be_user_id,ca ...
- js dongtai xianshi textarea zishu
<form name="FORM" id="FORM" method="post" action="?action=$atc ...
- YouTube Cobalt 浏览器支持
Cobalt介绍: Cobalt浏览器是YouTube公司定制的一款专用浏览器,Cobalt的使命,是在电视机端,使用灵活多变web形式实现流畅的交互操作,从而替代Android,与普通浏览器不同,C ...
- 重建二叉树(python)
题目描述 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树.假设输入的前序遍历和中序遍历的结果中都不含重复的数字.例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7, ...