poj1182食物链(种类并查集)
http://poj.org/problem?id=1182
r[x] = 0 表示x和父亲是同类
r[x] = 1 表示x吃父亲
r[x] = 2 表示x被父亲吃
因为只存在三种动物,且三种动物构成了环形
所以动物之间的关系是可推导的。
如图:
c与a的关系为(r[b] + r[c])%3; b与父亲a的关系可为0,1,2 c与父亲b的关系为0,1,2 。每种取值时,自己在纸上推导一下,就能得到这个关系。
路径压缩的时候就要用到这个关系来修改r[c],
如何判断 D a b 是不是假话呢? 当fa == fb 时。说明动物a和b都在一个集合里。那么可以推导它们之间的关系
我们已知两条黑线,我们要求得是红线2,即a与b的关系。 如果知道红线1,那么推导a和b的关系,那么就和上面那个图一样
红线1 = (3 - r[b])%3; 这个枚举一下r[b]的取值,然后推一下就知道了
所以如果 (r[a] + 3-r[b])%3==d-1 那么就是真话
如果fa!=fb。 那么就要合并两个集合
。道理和上面一样,先求红线1,然后求红线2,继而求出红线3.然后合并两个集合
#include <stdio.h>
int father[],r[]; void init(int n)
{
for(int i=; i<=n; ++i)
{
father[i] = i;
r[i] = ;
}
} int find(int x)
{
if(x==father[x]) return father[x];
int t = find(father[x]);
r[x] = (r[father[x]] + r[x])%;
father[x] = t;
return father[x];
/*
路径压缩时关系的推导,r[father[x]] 是father[x]和根结点的关系,r[x]是x和father[x]的关系
*/
}
int main()
{
int n,k,i,d,x,y,ans,fx,fy;
scanf("%d%d",&n,&k);
{
ans = ;
init(n);
for(i=; i<k; ++i)
{
scanf("%d%d%d",&d,&x,&y);
if(x>n || y>n ||(d== && x==y)) ans++;
else
{
fx = find(x);
fy = find(y);
if(fx==fy)
{
if((r[x]+-r[y])%!=d-) ans++;
}
else
{
father[fx] = fy;
//r[fy] = (r[x]-r[y]+d-1+3)%3;
r[fx] = (d-+r[y]-r[x])%;
}
}
}
printf("%d\n",ans);
}
return ;
}
poj1182食物链(种类并查集)的更多相关文章
- NOI2001|POJ1182食物链[种类并查集 向量]
食物链 Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 65430 Accepted: 19283 Description ...
- POJ1182 食物链 —— 种类并查集
题目链接:http://poj.org/problem?id=1182 食物链 Time Limit: 1000MS Memory Limit: 10000K Total Submissions: ...
- poj1182(种类并查集好题)
不得不说,我得感谢@驱动幽灵百鬼夜行小肆,正是因为看明白了他给出的解析,我才完全弄懂种类并查集的,这里,我也不想去改其他的,就直接引用他的解题报告吧 转载:http://blog.csdn.net/c ...
- POJ1182 食物链(并查集)
食物链 Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 55260 Accepted: 16210 Description ...
- POJ1182食物链(并查集)
Description 动物王国中有三类动物A,B,C,这三类动物的食物链构成了有趣的环形.A吃B, B吃C,C吃A. 现有N个动物,以1-N编号.每个动物都是A,B,C中的一种,但是我们并不知道它到 ...
- POJ-1182 食物链(并查集)
食物链 Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 75814 Accepted: 22528 Description ...
- poj1182 食物链【并查集-好题!】
动物王国中有三类动物A,B,C,这三类动物的食物链构成了有趣的环形.A吃B, B吃C,C吃A. 现有N个动物,以1-N编号.每个动物都是A,B,C中的一种,但是我们并不知道它到底是哪一种. 有人用两 ...
- POJ1182食物链 (并查集)
第一反应就是和那个搞基的虫子的题很像(poj2492 http://www.cnblogs.com/wenruo/p/4658874.html),不过是把种类从2变成了3. 错在很白痴的地方,卡了好久 ...
- poj1182 食物链(并查集 好题)
https://vjudge.net/problem/POJ-1182 并查集经典题 对于每只动物创建3个元素,x, x+N, x+2*N(分别表示x属于A类,B类和C类). 把两个元素放在一个组代表 ...
- P2024 [NOI2001]食物链(种类并查集)
题目链接: https://www.luogu.org/problemnew/show/P2024 题目描述 动物王国中有三类动物 A,B,C,这三类动物的食物链构成了有趣的环形.A 吃 B,B 吃 ...
随机推荐
- vc 按钮自绘
按钮自绘,将按钮区域分成三部分,左边.右边.中间都由贴图绘制,可用于手动进度条按钮,或者左右选择项按钮 cpp代码部分: // LRSkinButton.cpp : implementation fi ...
- 可能性dp+减少国家HDU4336
Card Collector Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Subm ...
- WKE——Webkit精简的纯C接口的浏览器
以前不知道有这个东西 https://github.com/cexer/wke http://blog.csdn.net/weolar/article/details/50383491 http:// ...
- 学习android内核 -- 内存管理相关
Android内存管理: 1.当应用程序关闭以后,后台对应的进程并没有真正的退出(处于休眠状态,一般不占用系统CPU的资源),这是为了下次再启动的时候能快速启动. 2.当系统内存不够时,AmS会主动根 ...
- hdu2159 Fate 二维背包
#include <cstring> #include <string> #include <cstdio> #include <cmath> #inc ...
- 13、Cocos2dx 3.0游戏开发找小三之3.0中的Director :郝萌主,一统江湖
重开发人员的劳动成果.转载的时候请务必注明出处:http://blog.csdn.net/haomengzhu/article/details/27706967 游戏中的基本元素 在曾经文章中.我们具 ...
- [初探iOS开发]storyboard的使用
storyboard的目的是为了方便的设计程序view之间的关系,使得程序员把精力都放到核心业务逻辑之上.
- NYOJ 914 Yougth的最大化
Yougth的最大化 时间限制:1000 ms | 内存限制:65535 KB 难度:4 描写叙述 Yougth如今有n个物品的重量和价值各自是Wi和Vi,你能帮他从中选出k个物品使得单位重量的价 ...
- hadoop集群空间使用情况报告脚本
近期集群空间有点紧张,总是操心空间不足而崩溃,近期扩容又不太现实,经与集群用户沟通发现:集群上存储了非常多没用的历史数据,能够删除,这样就能够通过一个crontab脚本每天生成集群空间使用报告,当使用 ...
- Nginx分时段限制下载速度解决方案(原创)_于堡舰_新浪博客
Nginx分时段限制下载速度解决方案(原创)_于堡舰_新浪博客 Nginx分时段限制下载速度解决方案(原创) (2011-03-02 16:40:49) 转载▼ 标签: ngi ...