题目链接

分析:根据分析,关系的递推满足由[a,b]~[b,c]得:[a,c]=([a,b]+[b,c])%3;[a,d]=([a,b]+[b,c]+[c,d])%3.由rank数组表示关系

0 - 这个节点与它的父节点是同类

1 - 这个节点被它的父节点吃

2 - 这个节点吃它的父节点。

则:当 d = 1的时候,( d - 1 ) = 0,也就是我们制定的意义

当 d = 2的时候,( d - 1 ) = 1,代表Y被X吃,也是我们指定的意义。

逆推根节点与Y的关系

这部分也是穷举法推出来的,我们举例:

父相对于子的relation(即假如子是父的父节点,那么父的relation应该是什么,因为父现在是根节点,所以父.relation = 0,我们只能根据父的子节点反推子跟父节点的关系)

0             ( 3 - 0 ) % 3 = 0

1(父吃子)   ( 3 - 1 ) % 3 = 2 //父吃子

2(子吃父)    ( 3 - 2 ) % 3 = 1 //子吃父,一样的

因此合并时,x,y,a(x的根节点),b(y的根节点),d(x与y的关系),rank[x](x与a的关系),rank[y](y与b的关系)rank[b](b与a的关系)则:

[b,a]=([b,y]+[y,x]+[x,a])%3.而[b,y]=(3-[y,b])%3.因此rank[b]=(3-rank[y]+d+rank[x]).

#include <cstdio>
#include <cstring>
#include <string>
#include <cmath>
#include <iostream>
#include <algorithm>
#include <queue>
#include <cstdlib>
#include <stack>
#include <vector>
#include <set>
#include <map>
#define LL long long
#define mod 100000000
#define inf 0x3f3f3f3f
#define eps 1e-9
#define N 50010
#define FILL(a,b) (memset(a,b,sizeof(a)))
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
#define PII pair<int,int>
using namespace std;
int fa[N],rank[N];
int find(int x)
{
if(x==fa[x])return x;
int pa=fa[x];
fa[x]=find(fa[x]);
rank[x]=(rank[x]+rank[pa])%;
return fa[x];
}
void merge(int a,int b,int x,int y,int d)
{
fa[b]=a;
rank[b]=(-rank[y]+d-+rank[x])%;
}
int main()
{
int n,m;
scanf("%d%d",&n,&m);
for(int i=; i<=n; i++)
{
fa[i]=i;
rank[i]=;
}
int ans=;
while(m--)
{
int d,x,y;
scanf("%d%d%d",&d,&x,&y);
if(x>n||y>n||(d==&&x==y))ans++;
else
{
int a=find(x);
int b=find(y);
if(a!=b)merge(a,b,x,y,d);
else
{
if((rank[y]+-rank[x])%!=d-)ans++;
}
}
}
printf("%d\n",ans);
}

poj1182(并查集)的更多相关文章

  1. POJ1182并查集

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

  2. poj1182 并查集

     题目连接:http://poj.org/problem?id=1182 基础并查集,需要维护与根节点关系,解析见代码: /* poj 1182 并查集 思路分析:让你分析这些话里面多少假的 只需要用 ...

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

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

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

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

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

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

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

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

  7. 并查集(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( ...

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

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

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

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

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

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

随机推荐

  1. QNX 线程 调度策略 优先级 时钟频率 同步

    /* * barrier1.c */ #include <stdio.h>#include <unistd.h>#include <stdlib.h>#includ ...

  2. linux命令:Linux命令大全

    Linux命令大全 http://man.linuxde.net/

  3. 平衡树 - 红黑树(JQuery+Js+Canvas版本的,帮助大家理解)

    红黑树 1.红黑树介绍 年写的一篇论文中获得的.它是复杂的,但它的操作有着良好的最坏情况运行时间,并且在实践中是高效的:它可以在O(log n)时间内做查找,插入和删除,这里的n是树中元素的数目. 2 ...

  4. Ubuntu下安装Android SDK(图文教程)

    刚接触Ubuntu,对于我来说现在最迫切的就是需要把Android环境搭起来 之前我的博文中已经详细地写了JDK,Eclipse,ADT的安装..现在写下SDK的安装 1.下载Linux版本的Andr ...

  5. Apple iOS MDM开发流程

    一年前曾参与过中石油的一个移动平台项目,实现了通过MDM对iOS设备进行管理.由于苹果对于mdm这块的接口及开发流程只向几个合作伙伴进行了分享,并没有对具体实现的文档进行公开,所以这方面的资料非常少. ...

  6. StackOverFlow的2016统计

    http://stackoverflow.com/research/developer-survey-2016

  7. iOS 使用UIBezierPath类实现随手画画板

    在上一篇文章中我介绍了 UIBezierPath类 介绍 ,下面这篇文章介绍一下如何通过这个类实现一个简单的随手画画板的简单程序demo,功能包括:划线(可以调整线条粗细,颜色),撤销笔画,回撤笔画, ...

  8. NYOJ 1066 CO-PRIME(数论)

    CO-PRIME 时间限制:1000 ms  |  内存限制:65535 KB 难度:3 描写叙述 This problem is so easy! Can you solve it? You are ...

  9. struts2对action中的方法进行输入校验---xml配置方式(3)

    上面两篇文章已经介绍了通过编码java代码的方式实现action方法校验,这里我们介绍第二种方式:xml配置文件 首先我们来看一个样例: ValidateAction.java: package co ...

  10. 积累的VC编程小技巧之文件操作

    1.删除文件夹 // 删除文件夹及其所有内容void CBaseDoc::RemoveFolder(const CString &strPathName){    CString path = ...