博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
又见关系并查集 以POJ 1182 食物链为例
阅读量:7169 次
发布时间:2019-06-29

本文共 1577 字,大约阅读时间需要 5 分钟。

简单的关系并查集一般非常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 
#include
#include
#include
#include
#include
#include
#include
#include
#pragma comment(linker, "/STACK:1024000000");#define EPS (1e-8)#define LL long long#define ULL unsigned long long#define _LL __int64#define INF 0x3f3f3f3fusing 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;}

转载地址:http://eamwm.baihongyu.com/

你可能感兴趣的文章
go的基本语法(变量和函数)
查看>>
Python中yield表达式的使用
查看>>
中国剩余
查看>>
easyUi combotree 实现动态加载树节点
查看>>
php——配合QQ邮箱发送邮件
查看>>
Node.js面试题之2017
查看>>
matlab数据的平滑处理
查看>>
IGeometry 中取指定的点
查看>>
mysql 的 fiter push down 优化
查看>>
【高德地图API】如何设置Icon的imageSize?
查看>>
全排列 UVA 11525 Permutation
查看>>
php自己总结的一些相关资料
查看>>
MongoDB分片实战(三):性能和优化
查看>>
Java下拉列表联动的实现(从数据库读取数据)
查看>>
ui设计的好网站(转载)
查看>>
震惊,C++还有这种骚操作,看看const怎么用
查看>>
iOS 图文并茂的带你了解深拷贝与浅拷贝
查看>>
谷歌笔试题:如何随机选取1000个关键字
查看>>
流媒体服务器
查看>>
C#基础 out传值
查看>>