C - 食物链 POJ - 1182
C - 食物链 POJ - 1182
大佬,%%%
加入给你一个 1, 那 1 应该放进 A、B、还是C呢,不知道了,所以开三倍的空间, 1~n 表示 A, n+1~2n 表示 B, 2n+1 ~ 3*n 表示 C
我以为路径压缩了就可以用 fa[i] 代替 find(i) 了,实际上,这是不对的,修改的过程中,可能会跳过一些点,所以想要 fa[i] = find(i), 必须把所有元素 find 一遍才能实现
AC 代码
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
using namespace std;
const int maxn = 5e4+100;
int n, k;
int fa[3*maxn];int find(int x) {if(x == fa[x]) return x;else return fa[x] = find(fa[x]);
}void Union(int x, int y) {int xx = find(x), yy = find(y);if(xx == yy) return ;fa[yy] = xx;
}void init() {for(int i = 1; i <= 3*n; i++) fa[i] = i;
}int main() {// freopen("test.in", "r", stdin);scanf("%d%d", &n, &k);int cnt = 0;init();for(int i = 1; i <= k; i++) {int op, u, v;scanf("%d%d%d", &op, &u, &v);if(u > n || v > n || u <= 0 || v <= 0) cnt++;else if(op == 1){ // 因为每个元素在 A B C 中的效果是一样的,所以判断都以 A 进行即可 if(find(u) == find(v+n) || find(u) == find(v+2*n)) cnt++; // 如果 AB || AC 在同一集合,则错 else { Union(u, v);Union(u+n, v+n);Union(u+2*n, v+2*n);} }else if(op == 2) {if(find(u) == find(v) || find(u) == find(v+2*n)) cnt++; // A -> A || A -> C else { // 每次合并的结果都是 A -> B 则 A 是 B 的 father Union(u, v+n); // A -> BUnion(u+n, v+2*n); // B -> CUnion(u+2*n, v); // C -> A} }}printf("%d\n", cnt);return 0;
}
C - 食物链 POJ - 1182相关推荐
- 食物链 poj 1182
C - 食物链 Time Limit:1000MS Memory Limit:10000KB 64bit IO Format:%I64d & %I64u Submit Stat ...
- 食物链 POJ - 1182(带权并查集模板)
动物王国中有三类动物A,B,C,这三类动物的食物链构成了有趣的环形.A吃B, B吃C,C吃A. 现有N个动物,以1-N编号.每个动物都是A,B,C中的一种,但是我们并不知道它到底是哪一种. 有人用两种 ...
- 食物链 POJ - 1182
题目: 动物王国中有三类动物A,B,C,这三类动物的食物链构成了有趣的环形.A吃B, B吃C,C吃A. 现有N个动物,以1-N编号.每个动物都是A,B,C中的一种,但是我们并不知道它到底是哪一种. 有 ...
- P1892 [BOI2003]团伙 +食物链 POJ - 1182 (并查集+思维)
思路①: 开数组enem[i]记录节点i的敌对节点,当再次输入i的敌对节点时就把他所在并查集的根节点和enem[i]并起来. #include<bits/stdc++.h> using n ...
- POJ 1182 食物链 [并查集 带权并查集 开拓思路]
传送门 P - 食物链 Time Limit:1000MS Memory Limit:10000KB 64bit IO Format:%I64d & %I64u Submit ...
- POJ 1182 食物链,并查集的拓展
http://poj.org/problem?id=1182 /******************************************************** 此道题目 前天看的时候 ...
- poj 1182 食物链 并查集
转自一位大佬的最全题解 https://blog.csdn.net/c0de4fun/article/details/7318642 #include <cstdio> #include ...
- 【poj 1182】食物链 并查集应用
食物链 Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 59239 Accepted: 17332 Description 动物王 ...
- 【POJ - 1182】 食物链(附超详细讲解)(并查集--种类并查集经典题)
题干: 动物王国中有三类动物A,B,C,这三类动物的食物链构成了有趣的环形.A吃B, B吃C,C吃A. 现有N个动物,以1-N编号.每个动物都是A,B,C中的一种,但是我们并不知道它到底是哪一种. ...
最新文章
- swift_023(Swift 的继承)
- 你总是不要等到完全准备好了再去做事情
- opencv resize_opencv-python库基础操作(一)
- 动态数据源切换--AbstractRoutingDataSource
- Git - 命令行 - 使用 Tag 标记你的代码
- 如何使用fiddler工具抓包?
- 微软服务器打补丁步骤,自己手动制作 Windows 系统补丁包全过程
- 自定义IE地址栏图标
- matlab_多目标遗传算法
- bzoj 1709: [Usaco2007 Oct]Super Paintball超级弹珠
- Unity 之 获取物体的旋转角正确数值
- 电脑重启f12怎么处理_电脑开机蓝屏按F10F11F12才能打开.怎么办?
- 腾讯云PCDN:从P2P到万物互联服务框架
- 张博涵清华大学_2009年北大,清华提前录取保送生人数最多的 33所中学
- 将门CTO沈强:人工智能时代,技术创新将全面引爆商业变革
- 四、SQL函数②(字符串函数)
- Java面试题---第四阶段
- Qt windows下获取CPU、主板、硬盘、网卡等相关信息
- 记一次作业:完成企业网络安全运营建设方案
- app销售数据统计手机页面