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食物链(带权并查集)相关推荐

  1. POJ 1182 食物链 [并查集 带权并查集 开拓思路]

    传送门 P - 食物链 Time Limit:1000MS     Memory Limit:10000KB     64bit IO Format:%I64d & %I64u Submit  ...

  2. 食物链(带权并查集)

    目录 题目描述 思路 完整代码 题目描述 动物王国中有三类动物 A,B,CA,B,C,这三类动物的食物链构成了有趣的环形.AA 吃 BB,BB 吃 CC,CC 吃 AA. 现有 NN 个动物,以 1 ...

  3. ACM练级日志:带权并查集与食物链

    最近终于干掉了高中两年都没有搞定的题目:食物链,就是那个A吃B,B吃C,C吃A这道NOI的经典题.当年自己写了200多行,把自己都写碎了,也没弄出来,最近学习了带权并查集,终于搞定了这道题. 首先说说 ...

  4. 银河英雄传说 ← 带权并查集

    [问题描述] 有一个划分为N列的星际战场,各列依次编号为1,2,-,N. 有N艘战舰,也依次编号为1,2,-,N,其中第i号战舰处于第i列. 有T条指令,每条指令格式为以下两种之一: 1.M i j, ...

  5. poj1182 and 携程预赛2第一题 带权并查集

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

  6. 【POJ - 1703】Find them, Catch them(带权并查集之--种类并查集 权为与父节点关系)

    题干: Find them, Catch them Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 36176   Accep ...

  7. POJ 2912 Rochambeau(难,好题,枚举+带权并查集)

    下面的是从该网站上copy过来的,稍微改了一点,给出链接:http://hi.baidu.com/nondes/item/26dd0f1a02b1e0ef5f53b1c7 题意:有N个人玩剪刀石头布, ...

  8. POJ 1984 Navigation Nightmare 【经典带权并查集】

    任意门:http://poj.org/problem?id=1984 Navigation Nightmare Time Limit: 2000MS   Memory Limit: 30000K To ...

  9. 学习笔记——拓展域并查集和带权并查集

    1,拓展域并查集 一般的并查集只能查找出各元素之间是否存在某一种相同的联系,如:a和b是亲戚关系,b和c是亲戚关系,这时就可以查找出a和c也存在亲戚关系.但如果存在多种相对的联系时一般的并查集就不行了 ...

最新文章

  1. python装饰器教学_Python装饰器学习(九步入门)
  2. Xcode可重用代码块code snippets
  3. 给程序员的几条建议,精彩配图!
  4. 递归实现显示目标文件夹的所有文件和文件夹,并计算目标文件夹的大小
  5. python使用手册-python(自用手册)
  6. 2016 湖南省省赛B题《有向无环图》
  7. 任意文件上传mysql_BigDump 跨站脚本、SQL注入、任意文件上传漏洞
  8. Node.Js从零开始搭建数据管理后台 (一)
  9. [转]自用类库整理之SqlHelper和MySqlHelper
  10. 使用C#开发一个简单的P2P应用
  11. 自定义注解 实现自定义消息_实现自定义的未来
  12. 工业交换机的单模和多模能否互相替代?
  13. 怎么把网页保存到本地计算机,在IE浏览器中,将网页保存到本地计算机中,若只需保存其中的文字、超链接和表格信息,应该选择的保存类型为( )...
  14. CSS 处理溢出 overflow属性
  15. php代码实现tp5监听队列,thinkPHP5的队列使用
  16. C#读取数据库返回泛型集合(DataSetToList)
  17. linux---任务分配(PBS)
  18. cas5.3.2单点登录-配置记住我(十六)
  19. 楚留香获取服务器信息未响应,楚留香手游后期输出乏力解决方法分享
  20. html5设置页面标题,单选(4分) 下面选项中,可以将HTML5页面的标题设置为“我的第一个网页”的是()。...

热门文章

  1. 【英语学习】【WOTD】prestigious 释义/词源/示例
  2. 【英语学习】【WOTD】adjudicate 释义/词源/示例
  3. 开启Mosquitto系统topic功能
  4. gitlab windows安装_【Thrift】Windows编译Thrift源码及其依赖库
  5. UE4 编译虚幻引擎
  6. MiniFlow,帮助理解TensorFlow关键概念--图
  7. Keras-5 基于 ImageDataGenerator 的 Data Augmentation实现
  8. mysql 命令导入sql文件导出sql文件
  9. mybatis11--多对多关联查询
  10. Deploy Oracle 10.2.0.5 DataGuard on Red Hat Enterprise Linux 6.4