简单的关系并查集一般非常easy依据给出的关系搞出一个有向的环,那么两者之间的关系就变成了两者之间的距离。

对于此题:

若u。v不在一个集合内,则显然此条语句会合法(暂且忽略后两条。下同)。

那么将fu 变为 fv的儿子时需加一条权值为 w 的边,w 满足(w + ru)%3 = (rv+ (D == 1?

0 : 1))%3(ru。rv分别为u,v与fv的关系,即距离)。

之所以在D == 2时加 1。是由于u吃v表明着u到fv的距离比v到fv的距离大1。

同理。D == 1时,表明两者到fv的距离应该相等。

若u,v在一个集合内。仅仅须要推断ru%3 == (rv+(D == 1?):1))%3 是否成马上可。

只是这个题数据略坑啊。写成多组输入的根本过不了。

#include <algorithm>
#include <iostream>
#include <cstring>
#include <cstdlib>
#include <cstdio>
#include <queue>
#include <cmath>
#include <stack>
#include <map> #pragma comment(linker, "/STACK:1024000000");
#define EPS (1e-8)
#define LL long long
#define ULL unsigned long long
#define _LL __int64
#define INF 0x3f3f3f3f using namespace std; struct N
{
int fa,re;
} st[50010]; int Find(int x,int &R)
{
int f,re = 0; f = x; while(f != st[f].fa)
{
re = (re+st[f].re)%3;
f = st[f].fa;
} R = re;
int tre = 0,temp,tf; while(x != st[x].fa)
{
tf = st[x].fa;
temp = st[x].re; st[x].re = (re-tre+3)%3; tre = (tre+temp)%3;
st[x].fa = f;
x = tf;
} return f;
} bool Merge(int w,int u,int v)
{
int ru,rv;
int fu = Find(u,ru);
int fv = Find(v,rv); if(fu != fv)
{
st[fu].fa = fv;
if(w == 2)
st[fu].re = ((rv+1)%3 - ru + 3)%3;
else
st[fu].re = (rv%3- ru + 3)%3;
}
else
{
if(w == 1 && ru != rv)
return false; if(w == 2 && ru != (rv+1)%3 )
return false;
} return true;
} int main()
{
int n,k; int i,j,u,v,w; scanf("%d %d",&n,&k);
{
for(i = 1; i <= n; ++i)
st[i].fa = i,st[i].re = 0; int ans = 0; while(k--)
{
scanf("%d %d %d",&w,&u,&v); if(u > n || v > n || (w == 2 && u == v))
{
ans++;
continue;
} if(Merge(w,u,v) == false)
{
ans++;
}
} printf("%d\n",ans);
} return 0;
}

又见关系并查集 以POJ 1182 食物链为例的更多相关文章

  1. 并查集:POJ 1182 食物链 复习

    #include <iostream> #include <algorithm> #include <cstring> #include <cstdlib&g ...

  2. poj 1182 食物链 (带关系的并查集)

      食物链 Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 44835 Accepted: 13069 Description 动 ...

  3. poj 2492(关系并查集) 同性恋

    题目;http://poj.org/problem?id=2492 卧槽很前卫的题意啊,感觉节操都碎了, t组测试数据,然后n,m,n条虫子,然后m行,每行两个数代表a和b有性行为(默认既然能这样就代 ...

  4. poj 1182 (关系并查集) 食物链

    题目传送门:http://poj.org/problem?id=1182 这是一道关系型并查集的题,对于每个动物来说,只有三种情况:同类,吃与被吃: 所以可以用0,1,2三个数字代表三种情况,在使用并 ...

  5. poj 1182 食物链(关系并查集)

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

  6. Find them, Catch them(POJ 1703 关系并查集)

    Find them, Catch them Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 38668   Accepted: ...

  7. poj 1182:食物链(种类并查集,食物链问题)

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

  8. [并查集] POJ 1182 食物链

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

  9. POJ 1182 食物链(种类并查集)

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

随机推荐

  1. jquery-通过下拉菜单更改input日期

    通过下拉菜单的选项,将文本框中的日期更改为当前日期的90天后 技巧: d.getMonth()是从0开始计算的,所以要加上1,d.getFullYear()才能取到当前的年份 $("#acc ...

  2. jquery简直是太酷炫强大了

    链接地址:http://www.yyyweb.com/350.html Web 开发中很实用的10个效果[源码下载] 小鱼 发布于 3年前 (2014-07-15) 分类:前端开发 阅读(303741 ...

  3. java 日期和字符串互转,依据当天整天时间 得到当天最后一秒的日期时间

    java 日期和字符串互转.依据当天整天时间   得到当天最后一秒的日期时间 package com.hi; import java.text.DateFormat; import java.text ...

  4. 2014百度之星资格赛—— Xor Sum(01字典树)

    Xor Sum Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 132768/132768 K (Java/Others) Total ...

  5. c++友元实现操作符重载

    运算符重载的本质是一个函数 #include <iostream> using namespace std; class A { private: int m_a; int m_b; fr ...

  6. Android用canvas画哆啦A梦

    先上图: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/diss ...

  7. FireFox所支持的全部标签(持续更新ing)

    近期研究上各个浏览器的差别,得到一些资料,FireFox眼下所支持的全部标签类型,持续更新,供大家參考和学习,不喜勿喷哦 http://mxr.mozilla.org/seamonkey/source ...

  8. zzulioj--1633--Happy Thanksgiving Day - Hateable Name(字符串筛选)

     1633: Happy Thanksgiving Day - Hateable Name Time Limit: 1 Sec  Memory Limit: 128 MB Submit: 75   ...

  9. Kettle的四大不同环境工具

    不多说,直接上干货! kettle里有不同工具,分别用于ETL的不同阶段. 初学者,建议送Spoon开始.高手,是四大工具都会用. Sqoop: 图形界面工具,快速设计和维护复杂的ETL工作流.集成开 ...

  10. [转]m3u8直播测试地址

    http://www.cnblogs.com/yuandaozhe/p/5755453.html 调试m3u8的时候需要测试地址 找了几个,备用一下 安徽卫视 http://stream2.ahtv. ...