Acwing 240食物链(带权并查集)
AcWing 240.食物链
#include <iostream>
using namespace std;//巧妙的利用余数的关系
//种类0 : d[x] % 3 == 0
//种类1 : d[x] % 3 == 1
//种类2 : d[x] % 3 == 2
//2 -> 1 -> 0 -> 2const int N = 5e4 + 10;
int p[N], d[N];int find(int x)
{if(x != p[x]){int u = p[x]; //父节点记得保存,做完find后p[x]就保存的是跟节点的值了,因为做了路径压缩p[x] = find(p[x]); //找到自己的跟节点d[x] += d[u]; //将到父节点的距离更新成到跟节点的距离}return p[x];
}int main()
{int n, k;cin >> n >> k;for(int i = 1; i <= n; ++i) p[i] = i;int ans = 0;while(k--){int D, x, y;cin >> D >> x >> y;if(x > n || y > n) ++ans;else{int px = find(x), py = find(y);if(D == 1) // x和y是同类 那么 p[x] == p[y] && (d[x] - d[y]) % 3 == 0{if(px == py) //在同一食物链{//(d[x] % 3 == d[y] % 3) 与 (d[x] - d[y]) % 3 == 0 等价if((d[x] - d[y]) % 3) // 当等于1或者2时说明是假话++ans; } else //不在同一食物链, 需要将两个连到同一集合{p[px] = py;//要满足d[x] % 3 == d[y] % 3 所以(d[x] + ? - d[y]) % 3 == 0 所以d[px] = d[y] - d[x];d[px] = d[y] - d[x]; //到跟py的距离}}else //x吃y 那么 (d[x] - d[y] - 1) % 3 == 0{if(px == py){if((d[x] - d[y] - 1) % 3)++ans;}else{p[px] = py;d[px] = 1 + d[y] - d[x];}}}}cout << ans << endl;return 0;
}
Acwing 240食物链(带权并查集)相关推荐
- POJ 1182 食物链 [并查集 带权并查集 开拓思路]
传送门 P - 食物链 Time Limit:1000MS Memory Limit:10000KB 64bit IO Format:%I64d & %I64u Submit ...
- 食物链(带权并查集)
目录 题目描述 思路 完整代码 题目描述 动物王国中有三类动物 A,B,CA,B,C,这三类动物的食物链构成了有趣的环形.AA 吃 BB,BB 吃 CC,CC 吃 AA. 现有 NN 个动物,以 1 ...
- ACM练级日志:带权并查集与食物链
最近终于干掉了高中两年都没有搞定的题目:食物链,就是那个A吃B,B吃C,C吃A这道NOI的经典题.当年自己写了200多行,把自己都写碎了,也没弄出来,最近学习了带权并查集,终于搞定了这道题. 首先说说 ...
- 银河英雄传说 ← 带权并查集
[问题描述] 有一个划分为N列的星际战场,各列依次编号为1,2,-,N. 有N艘战舰,也依次编号为1,2,-,N,其中第i号战舰处于第i列. 有T条指令,每条指令格式为以下两种之一: 1.M i j, ...
- poj1182 and 携程预赛2第一题 带权并查集
题意: 动物王国中有三类动物A,B,C,这三类动物的食物链构成了有趣的环形.A吃B, B吃C,C吃A. 现有N个动物,以1-N编号.每个动物都是A,B,C中的一种,但是我们并不知道它到底 ...
- 【POJ - 1703】Find them, Catch them(带权并查集之--种类并查集 权为与父节点关系)
题干: Find them, Catch them Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 36176 Accep ...
- POJ 2912 Rochambeau(难,好题,枚举+带权并查集)
下面的是从该网站上copy过来的,稍微改了一点,给出链接:http://hi.baidu.com/nondes/item/26dd0f1a02b1e0ef5f53b1c7 题意:有N个人玩剪刀石头布, ...
- POJ 1984 Navigation Nightmare 【经典带权并查集】
任意门:http://poj.org/problem?id=1984 Navigation Nightmare Time Limit: 2000MS Memory Limit: 30000K To ...
- 学习笔记——拓展域并查集和带权并查集
1,拓展域并查集 一般的并查集只能查找出各元素之间是否存在某一种相同的联系,如:a和b是亲戚关系,b和c是亲戚关系,这时就可以查找出a和c也存在亲戚关系.但如果存在多种相对的联系时一般的并查集就不行了 ...
最新文章
- python装饰器教学_Python装饰器学习(九步入门)
- Xcode可重用代码块code snippets
- 给程序员的几条建议,精彩配图!
- 递归实现显示目标文件夹的所有文件和文件夹,并计算目标文件夹的大小
- python使用手册-python(自用手册)
- 2016 湖南省省赛B题《有向无环图》
- 任意文件上传mysql_BigDump 跨站脚本、SQL注入、任意文件上传漏洞
- Node.Js从零开始搭建数据管理后台 (一)
- [转]自用类库整理之SqlHelper和MySqlHelper
- 使用C#开发一个简单的P2P应用
- 自定义注解 实现自定义消息_实现自定义的未来
- 工业交换机的单模和多模能否互相替代?
- 怎么把网页保存到本地计算机,在IE浏览器中,将网页保存到本地计算机中,若只需保存其中的文字、超链接和表格信息,应该选择的保存类型为( )...
- CSS 处理溢出 overflow属性
- php代码实现tp5监听队列,thinkPHP5的队列使用
- C#读取数据库返回泛型集合(DataSetToList)
- linux---任务分配(PBS)
- cas5.3.2单点登录-配置记住我(十六)
- 楚留香获取服务器信息未响应,楚留香手游后期输出乏力解决方法分享
- html5设置页面标题,单选(4分) 下面选项中,可以将HTML5页面的标题设置为“我的第一个网页”的是()。...
热门文章
- 【英语学习】【WOTD】prestigious 释义/词源/示例
- 【英语学习】【WOTD】adjudicate 释义/词源/示例
- 开启Mosquitto系统topic功能
- gitlab windows安装_【Thrift】Windows编译Thrift源码及其依赖库
- UE4 编译虚幻引擎
- MiniFlow,帮助理解TensorFlow关键概念--图
- Keras-5 基于 ImageDataGenerator 的 Data Augmentation实现
- mysql 命令导入sql文件导出sql文件
- mybatis11--多对多关联查询
- Deploy Oracle 10.2.0.5 DataGuard on Red Hat Enterprise Linux 6.4