题目传送门

题目大意:大家都懂。

思路:

  今天给实验室的学弟学妹们讲的带权并查集,本来不想细讲的,但是被学弟学妹们的态度感动了,所以写了一下这个博客,思想在今天白天已经讲过了,所以直接上代码。

首先,带权并查集必备知识是向量加减规则,不熟悉的可以看我的另外一篇博客(点我

  先放图,模拟的是  x吃y  和x和y同类的向量合并。

这应该是最难的地方,很多东西白天已经讲过了,具体看代码,我写了比较详细的注释。

#include<iostream>
#include<cstdio>
using namespace std;
const int maxn=;
int p=;
//p%3==0 由于下面有向量相减 可能部分value是负的,所以加上一个比较大的数字变成正数
int fa[maxn],n,k,ans,type,x,y,value[maxn];
//value数组 永远记录的都是 当前节点 到fa[x]的权值 此时fa[x]对应的value不一定更新了 ,需要find进行路径合并
//记住 find的功能是找爸爸 + 路径合并 + 更新value[x]
// baba函数的功能是 联合 向量规则更新value
// x->y的权值是1,就是x吃y
int find(int x)
{
if(x==fa[x])return fa[x];
int tep=fa[x]; //先保存当前的还没有路径合并的父节点
fa[x]=find(fa[x]); //把 父节点权值信息更新
value[x]+=value[tep]; //value存的是x到之前的父节点的信息,现在加上 原父节点(tep)合并路径后的权值
return fa[x];
}
void baba(int x,int y,int type)
{
int fx=find(x),fy=find(y);
if(type==) //平级权值为0
{
fa[fx]=fy;
value[fx]=-value[x]+value[y]+; //x的爸爸认y的爸爸当爸爸,用向量规则进行加减
}else{ //x吃y 权值1
fa[fx]=fy;
value[fx]=-value[x]+value[y]+; //x的爸爸认y的爸爸当爸爸,用向量规则进行加减
}
}
int main(){
cin>>n>>k;
for(int i=;i<=n;i++)
{
fa[i]=i;
}
while(k--)
{
scanf("%d%d%d",&type,&x,&y);
if(x>n||y>n||(x==y&&type==)){ //如果标号大于n 或者自己吃自己 肯定错
ans++;
continue;
}
if(find(x)!=find(y)) //如果父亲不同 不在同一集合 肯定不会错 现在合并(因为现在给出的信息已经是限制条件了)
{
baba(x,y,type); //合并的类型是type
}else{
if(type==) //如果是平级的
{
if((value[x]+p)%!=(value[y]+p)%){ //距离根节点的权值 取余3相等才合法(也就是和根节点的相食关系一致)
ans++; //不合法 加加
}
}else{
if((value[x]-value[y]+p)%==||(value[y]-value[x]+p)%==){
//合法就是x吃y,所以要么x比y大1,要么y比x大2(石头剪子布)
}else{
ans++;
}
}
}
}
cout<<ans<<endl;
}

poj1182 食物链 带权并查集的更多相关文章

  1. poj1182(带权并查集)

    题目链接:http://poj.org/problem?id=1182 题意:题目告诉有  3  种动物,互相吃与被吃,现在告诉你  m  句话,其中有真有假,叫你判断假的个数  (  如果前面没有与 ...

  2. poj 1182 食物链 带权并查集

    食物链是并查集的进阶运用的一道非常经典的题目. 题目如下: 动物王国中有三类动物A,B,C,这三类动物的食物链构成了有趣的环形.A吃B, B吃C,C吃A. 现有N个动物,以1-N编号.每个动物都是A, ...

  3. POJ 1182 食物链 (带权并查集 && 向量偏移)

    题意 : 中文题就不说题意了…… 分析 : 通过普通并查集的整理归类, 能够单纯地知道某些元素是否在同一个集合内.但是题目不仅只有种类之分, 还有种类之间的关系, 即同类以及吃与被吃, 而且重点是题目 ...

  4. POJ-1182(经典带权并查集)

    食物链 POJ-1182 一个很好的分析博客:https://blog.csdn.net/niushuai666/article/details/6981689 三种关系:两者同类,吃父节点,被父节点 ...

  5. 并查集——poj1182(带权并查集高阶)

    题目链接:食物链 题解:点击 说一声:这题关系推导值得学习.

  6. 【POJ1182】 食物链 (带权并查集)

    Description 动物王国中有三类动物A,B,C,这三类动物的食物链构成了有趣的环形.A吃B, B吃C,C吃A. 现有N个动物,以1-N编号.每个动物都是A,B,C中的一种,但是我们并不知道它到 ...

  7. poj1182食物链,经典带权并查集

    动物王国中有三类动物A,B,C,这三类动物的食物链构成了有趣的环形.A吃B, B吃C,C吃A. 现有N个动物,以1-N编号.每个动物都是A,B,C中的一种,但是我们并不知道它到底是哪一种. 有人用两种 ...

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

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

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

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

随机推荐

  1. SpringCloud03 Ribbon知识点、 Feign知识点、利用RestTemplate+Ribbon调用远程服务提供的资源、利用feign调用远程服务提供的资源、熔断

    1 远程服务资源的调用 1.1 古老的套路 在微服务出现之前,所有的远程服务资源必须通过RestTemplate或者HttpClient进行:但是这两者仅仅实现了远程服务资源的调用,并未提供负载均衡实 ...

  2. opennebula 一些问t题讨论

    ou_ian - June 8th, 2011 11:13 am非常想请教一下如何设置VM的ip为DHCP? 我们的VM都需要通过eth0 (通过公司的DHCP获得ip)来连接到公司的网络(Inter ...

  3. Solidity字符串拼接实现oraclize动态查询

    solidity本身没有字符串拼接功能,但是如果你恰巧要用oraclize api,那么可以使用oraclize api中的字符串拼接方法(strConcat).之所以oraclize api里会有s ...

  4. Python pip命令

    一.简介 pip 是一个安装和管理 Python 包的工具 , 是 easy_install 的一个替换品.distribute是setuptools的取代(Setuptools包后期不再维护了),p ...

  5. 33.HAVING 子句

    HAVING 子句 在 SQL 中增加 HAVING 子句原因是,WHERE 关键字无法与合计函数一起使用. SQL HAVING 语法 SELECT column_name, aggregate_f ...

  6. ByteUnit

    JDK里面有TimeUnit,看spark源码有个ByteUnit.这个类还是挺不错的. public enum ByteUnit { BYTE (1), KiB (1024L), MiB ((lon ...

  7. C#使用var定义变量时的四个特点

    使用var定义变量时有以下四个特点: 1. 必须在定义时初始化.也就是必须是var s = “abcd”形式: 2. 一但初始化完成,就不能再给变量赋与初始化值类型不同的值了. 3.   var要求是 ...

  8. 一步到位带你入门Selenium

    其实,关于这篇文章发布前还是有很多思考的,我是不想发布的,因为关于selenium的文章博客园里面有很多的介绍,写的详细的,也有写的不详细的,那么我的这篇文章的定位是基于selnium从开始到最后的框 ...

  9. java IO Nio 文件拷贝工具类Files

    public static void main(String[] args) throws Exception { Files.copy(Paths.get("file/text.txt&q ...

  10. 《深度学习原理与TensorFlow实践》喻俨,莫瑜

    1. 深度学习简介 2. TensorFlow系统介绍 3. Hello TensorFlow 4. CNN看懂世界 5. RNN能说会道 6. CNN LSTM看图说话 7. 损失函数与优化算法 T ...