题目连接:http://poj.org/problem?id=1182
基础并查集,需要维护与根节点关系,解析见代码:
/*
poj 1182 并查集
思路分析:让你分析这些话里面多少假的
只需要用一个并查集将已经给出的这些元素存起来
同时记录每个元素与他们根节点关系,如果根结点相同
但是关系不符合就是出现了矛盾。
关系有三种:同类 记为0 吃根节点 1 被根节点吃 2
这样也是为了与他给出的d关系一致
d-1就与我们规定的关系一致了
并查集的关键是路径压缩,在压缩路径的同时我们要更新与根节点关系
寻找根节点时,要一并将根节点之下的元素与新的根节点的关系着更新掉
relate[x]=(relate[x]+relate[fa[x]])%3
合并的时候要更新根结点之间的关系,这个关系用向量很容易找到
fx->fy=fx->x(-relate[x])+x->y(d-1)+y->fy(relate[y])
*/
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;
const int maxn=+;
int father[maxn],relat[maxn];//关系数组,表明它与父节点的关系,0代表同类,1代表被父节点吃,2代表吃父节点
int n,k;
int findroot(int x)
{
if(x==father[x]) return x;
int oldfa=father[x];
father[x]=findroot(father[x]);
relat[x]=(relat[x]+relat[oldfa])%;//更新压缩路径后它与父节点的关系
return father[x];
}
void merge(int d,int x,int y)
{
int fx=findroot(x);
int fy=findroot(y);
if(fx==fy) return;
father[fx]=fy;
relat[fx]=(relat[y]+d-relat[x]+)%;
return;
}
bool istrue(int d,int x,int y)
{
if(x>n||y>n||((d==)&&(x==y)))
return false;
int fx=findroot(x),fy=findroot(y);
if(fx!=fy)//两者关系待定
return true;
else
{
if(relat[x]==(relat[y]+(d-))%) return true;
else return false;
}
}
int main()
{
int d,a,b;
scanf("%d%d",&n,&k);
int ans=;
memset(relat,,sizeof(relat));
memset(father,,sizeof(father));
for(int i=;i<=n;i++)
{
father[i]=i;
relat[i]=;//自己和自己是同类
}
while(k--)
{
scanf("%d%d%d",&d,&a,&b);
if(!istrue(d,a,b))
ans++;
else
merge(d-,a,b);
}
printf("%d\n",ans);
}

poj1182 并查集的更多相关文章

  1. POJ1182并查集

    食物链 时间限制:1000 ms  |  内存限制:65535 KB 难度:5   描述 动物王国中有三类动物A,B,C,这三类动物的食物链构成了有趣的环形.A吃B, B吃C,C吃A. 现有N个动物, ...

  2. poj1182 食物链(并查集 好题)

    https://vjudge.net/problem/POJ-1182 并查集经典题 对于每只动物创建3个元素,x, x+N, x+2*N(分别表示x属于A类,B类和C类). 把两个元素放在一个组代表 ...

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

    食物链 Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 65430   Accepted: 19283 Description ...

  4. 并查集专辑 (poj1182食物链,hdu3038, poj1733, poj1984, zoj3261)

    并查集专题训练地址,注册登录了才能看到题目 并查集是一个树形的数据结构,  可以用来处理集合的问题, 也可以用来维护动态连通性,或者元素之间关系的传递(关系必须具有传递性才能有并查集来维护,因为并查集 ...

  5. POJ-1182 食物链---并查集(附模板)

    题目链接: https://vjudge.net/problem/POJ-1182 题目大意: 中文题,不多说. 思路: 给每个动物创建3个元素,i-A, i-B, i-C i-x表示i属于种类x,并 ...

  6. 并查集(POJ1182)

    链接:http://poj.org/problem?id=1182 定义一种关系R(x,y),x > y 时 R(x,y) = 2:x = y 时 R(x,y)= 1:x < y 时 R( ...

  7. 种类并查集——带权并查集——POJ1182;HDU3038

    POJ1182 HDU3038 这两个题比较像(一类题目),属于带权(种类)并查集 poj1182描绘得三种动物种类的关系,按照他一开始给你的关系,优化你的种类关系网络,最后看看再优化的过程中有几处矛 ...

  8. poj1182 食物链(带权并查集)

    题目链接 http://poj.org/problem?id=1182 思路 前面做的带权并查集的权值记录该结点与其父结点是否是同一类,只有两种取值情况(0,1),在这题中某结点a和其父结点b的取值共 ...

  9. 【带权并查集】poj1182 食物链

    带权并查集,或者叫做种类并查集,经典题. http://blog.csdn.net/shuangde800/article/details/7974668 这份代码感觉是坠吼的. 我的代码是暴力分类讨 ...

随机推荐

  1. forever 使用

    安装: $npm install -g forever y@y:ydkt$ forever start server/app.js warn: --minUptime not set. Default ...

  2. 【Linux】鸟哥的Linux私房菜基础学习篇整理(十二)

    1. depmod [-Ane]:更新内核模块依赖.参数:无参数:depmod会主动分析目前内核的模块,并重新写入/lib/modules/$(uname -r)/modules.dep中:-A:de ...

  3. SDUT2484 算术表达式的转换(表达式树)

    题目链接. 分析: 转换成表达式树,然后先序.中序.后序遍历. AC代码如下: #include <stdio.h> #include <string.h> #define m ...

  4. IT码农哥放弃50万年薪:辞职卖咖喱凉皮(背后深藏功与名)_互联网的一些事

    IT码农哥放弃50万年薪:辞职卖咖喱凉皮(背后深藏功与名)_互联网的一些事 IT码农哥放弃50万年薪:辞职卖咖喱凉皮(背后深藏功与名)

  5. 9月19号-9月21号丰宁坝上草原行 - 营销系统 - 京东内部论坛 - Powered by Discuz!

    9月19号-9月21号丰宁坝上草原行 - 营销系统 - 京东内部论坛 - Powered by Discuz! 9月19号-9月21号丰宁坝上草原行   [复制链接]

  6. call-template和apply-templates

    对xml模板 来说,name属性是很关键的 call-template /apply-template 的name必须要和模板的name相对应.模板相当于一个函数,可以暂时这么看.而name相当于函数 ...

  7. SpringMVC进行文件的上传以及多文件的上传(转)

    基本的SpringMVC的搭建在我的上一篇文章里已经写过了,这篇文章主要说明一下如何使用SpringMVC进行表单上的文件上传以及多个文件同时上传的步骤 SpringMVC 基础教程 框架分析:htt ...

  8. SuppressWarnings的警告

    简介:java.lang.SuppressWarnings是J2SE 5.0中标准的Annotation之一.可以标注在类.字段.方法.参数.构造方法,以及局部变量上.作用:告诉编译器忽略指定的警告, ...

  9. html5 教程

    http://www.tutorialspoint.com/html5/index.htm

  10. android recovery 主系统代码分析

    阅读完上一篇文章: http://blog.csdn.net/andyhuabing/article/details/9226569 我们已经清楚了如何进入正常模式和Recovery模式已有深刻理解了 ...