带权并查集 poj1182
首先要注意核心代码
int find(int i){
if(i == fa[i])
return fa[i];
int tt = find(fa[i]);
num[i] = (num[i] + num[fa[i]]) % 3;
fa[i] = tt;
return fa[i];
}
不能写成
int find(int i){
if(i == fa[i])
return fa[i];
fa[i] = find(fa[i]);
num[i] = (num[i] + num[fa[i]]) % 3;
//fa[i] = tt;
return fa[i];
}
如果这样的话fa指的就不是他的father而是他的祖先算num的时候会发生错误
而后37,8行不能这样写
num[find(y)] = (num[x] + (3-a) + 3-num[y]) %3;//这是会造成最祖先不是0 接下来find是会错误
fa[find(y)] = fx;
由这件事我们知道做带权并查集时要是可保证最祖先权值为零,预处理出所有要求的最祖先也是一个好习惯。
#include<iostream>
#include<string.h>
#include<stdio.h>
using namespace std;
const int maxa = ;
int fa[maxa];
int num[maxa];
int find(int i){
if(i == fa[i])
return fa[i];
int tt = find(fa[i]);
num[i] = (num[i] + num[fa[i]]) % ;
fa[i] = tt;
return fa[i];
} int main(){
//freopen("in.cpp", "r", stdin);
int n, m;
int x, y, a;
scanf("%d%d", &n, &m);
int sum = ;
for(int i = ; i <= n; i++)
fa[i] = i, num[i] = ;
for(int i = ; i <= m; i++){
scanf("%d%d%d", &a, &x, &y);
//printf("%d %d %d\n", a, x, y);
if(x > n || y > n )//||(x == y && a == 2) )
sum ++;
else{
a --;
int fx = find(x), fy = find(y);
if(fx == fy){
if((num[x] - num[y] + ) % != a)
sum ++;//,printf("%d %d %d %d\n",x, y, find(x), find(y));
}else{
num[fy] = (num[x] + (-a) + -num[y]) %;
fa[fy] = fx;
//printf("%d %d %d %d %d\n",x, y, num[x], num[y], sum);
}
}
}
printf("%d\n", sum); }
带权并查集 poj1182的更多相关文章
- 种类并查集——带权并查集——POJ1182;HDU3038
POJ1182 HDU3038 这两个题比较像(一类题目),属于带权(种类)并查集 poj1182描绘得三种动物种类的关系,按照他一开始给你的关系,优化你的种类关系网络,最后看看再优化的过程中有几处矛 ...
- 并查集例题02.带权并查集(poj1182)
Description 动物王国中有三类动物A,B,C,这三类动物的食物链构成了有趣的环形.A吃B, B吃C,C吃A.现有N个动物,以1-N编号.每个动物都是A,B,C中的一种,但是我们并不知道它到底 ...
- poj1182 食物链(带权并查集)
题目链接 http://poj.org/problem?id=1182 思路 前面做的带权并查集的权值记录该结点与其父结点是否是同一类,只有两种取值情况(0,1),在这题中某结点a和其父结点b的取值共 ...
- 【带权并查集】poj1182 食物链
带权并查集,或者叫做种类并查集,经典题. http://blog.csdn.net/shuangde800/article/details/7974668 这份代码感觉是坠吼的. 我的代码是暴力分类讨 ...
- 【POJ1182】 食物链 (带权并查集)
Description 动物王国中有三类动物A,B,C,这三类动物的食物链构成了有趣的环形.A吃B, B吃C,C吃A. 现有N个动物,以1-N编号.每个动物都是A,B,C中的一种,但是我们并不知道它到 ...
- poj1182食物链,经典带权并查集
动物王国中有三类动物A,B,C,这三类动物的食物链构成了有趣的环形.A吃B, B吃C,C吃A. 现有N个动物,以1-N编号.每个动物都是A,B,C中的一种,但是我们并不知道它到底是哪一种. 有人用两种 ...
- poj1182(带权并查集)
题目链接:http://poj.org/problem?id=1182 题意:题目告诉有 3 种动物,互相吃与被吃,现在告诉你 m 句话,其中有真有假,叫你判断假的个数 ( 如果前面没有与 ...
- Poj1182 食物链(并查集/带权并查集)
题面 Poj 题解 这里采用并查集的补集. \(x\)表示同类集合,\(x+n\)表示敌人集合,\(x+n\times2\)表示敌人的敌人集合. 如果当前给出的是一对同类关系,就判断\(x\)是否吃\ ...
- poj1182 食物链 带权并查集
题目传送门 题目大意:大家都懂. 思路: 今天给实验室的学弟学妹们讲的带权并查集,本来不想细讲的,但是被学弟学妹们的态度感动了,所以写了一下这个博客,思想在今天白天已经讲过了,所以直接上代码. 首先, ...
随机推荐
- 关于@font-face的一些问题
@font-face 能够加载服务器端的字体文件,让客户端显示客户端所没有安装的字体.[微软的IE 5已经是开始支持这个属性,但是只支持微软自有的.eot (Embedded Open Type) 格 ...
- FileZilla 无法保存密码
当保存密码时遇到这个问题时: 解决办法: 一.找到FileZilla的设置: 二.点击"界面",取消勾选"不要保存密码",点击"确定"按钮, ...
- php开发通用采集程序
php采集程序构建基本步骤: 采集程序是什么?获取远程数据(文字.图片.图片)并快速保存到本地或指定地址. 如天气预报(小偷程序): 远程获取-->替换内容-->展示给用户 如实时更新的新 ...
- C C++ Java中的static
[原文出处]: http://hi.baidu.com/aezealer/blog/item/fb8fdd438113c8169213c6c5.h tml 术语“static”有段不寻常的历史.起初, ...
- MyVoix2.0.js 源码分析 WebSpeech与WebAudio篇
楔 子 随着移动互联网时代的开启,各种移动设备走进了我们的生活.无论是日常生活中人手一部的手机,还是夜跑者必备的各种智能腕带,亦或者是充满未来科技感的google glass云云,它们正渐渐改变着我们 ...
- 利用http实现文件的上传和下载
其他语言都比较方便,使用http上传.但是C++这样就差点,不过还好,Linux下有个curl的命令行工具,这是一个开源项目,底下有个子项目是libcurl,curl就是调用这个API实现的一系列ft ...
- MyBatis里字段到枚举类型的转换/映射
一.简介 我们在用MyBatis里,很多时间有这样一个需求:bean里有个属性是枚举,在DB存储时我们想存的枚举的代号,从DB拿出来时想直接映射成目标枚举类型,也即代号字段与Java枚举类的相互类型转 ...
- left join 关联条件位置
select e.last_name, e.department_id, d.department_name from hr.employees e left outer join hr.depart ...
- oschina企业应用
企业应用 6企业搜索引擎 20ESB企业服务总线 34LaTeX排版系统 32软电话交换机/VOIP/PBX 9邮件列表管理 42大数据 21开源医疗项目 12人力资源管理 15家庭自动化系统 16E ...
- 将大型 Page Blob 的页范围进行分段
Windows Azure 存储支持一种 Blob 类型,即 Page Blob.Page Blob 通过仅将已写入但未清除的页存入物理存储, 来有效存储稀疏数据.每页大小为 512 字节.Ge ...