分类并查集[noi2001 食物链]
题目链接:http://cogs.pro:8081/cogs/problem/problem.php?pid=pxNJzxVPU
题目有三种动物,A吃B,B吃C,C吃A
即B是A的食物,A是B的天敌,以此类推。
因此有可以有三个集合,0-N表示动物,N-N+N表示其食物,N+N-N*3表示其天敌。
代码如下:
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <cstdio>
#define MAXN 50100
using namespace std;
int N, K, D, x, y;
int ans = ;
int pre[MAXN * ]; //n 是同类 n + n是食物, n * 3是天敌 int find(int x)
{
if (x == pre[x])
return x;
return pre[x] = find(pre[x]);
} void Union(int x, int y)
{
pre[find(x)] = find(y);
} int main()
{
freopen("eat.in", "r", stdin);
freopen("eat.out", "w", stdout);
scanf("%d %d", &N, &K);
for (int i = ; i < N * ; i++)
pre[i] = i; while (K--)
{
scanf("%d %d %d", &D, &x, &y);
if (x > N || y > N)
ans++;
else
{
if (D == )
{ //x的食物是y或者x的天敌是y
if (find(x + N) == find(y) || find(x + N * ) == find(y))
{
ans++;
continue;
}
else //xy是同类,xy的食物是同类,xy天敌是同类
{
Union(x, y);
Union(x + N, y + N);
Union(x + (N << ), y + (N << ));
}
}
else
{
if (x == y || find(x) == find(y) || find(x) == find(y + N)) //y的食物和x是同类
{
ans++;
continue;
}
else //x和y的天敌同类,x的食物和y同类,x的天敌和y的食物是同类
{
Union(x, y + (N << ));
Union(x + N, y);
Union(x + (N << ), y + N);
}
}
}
}
printf("%d\n", ans);
return ;
}
分类并查集[noi2001 食物链]的更多相关文章
- poj 1182:食物链(种类并查集,食物链问题)
食物链 Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 44168 Accepted: 12878 Description ...
- poj 2912 并查集(食物链加强版)
题目:给出n个人玩剪刀石头布的游戏,其中有一个人是裁判,剩下的人分为3组,每一组的人只出某一种手型,裁判可以任意出.问是否能判断出哪个人是裁判 链接:点我 分分钟看吐血,先把食物链看懂吧 枚举裁判,然 ...
- Rochambeau---poj2912||zoj2751(并查集类似于食物链)
题目链接:http://poj.org/problem?id=2912 http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=1751 ...
- 并查集-G - 食物链
G - 食物链 动物王国中有三类动物A,B,C,这三类动物的食物链构成了有趣的环形.A吃B, B吃C,C吃A.现有N个动物,以1-N编号.每个动物都是A,B,C中的一种,但是我们并不知道它到底是哪一种 ...
- 洛谷 P2024 [NOI2001]食物链(种类并查集,加权并查集)
传送门 解题思路 加权并查集: 什么是加权并查集? 就是记录着每个节点到它的父亲的信息(权值等). 难点:在路径压缩和合并节点时把本节点到父亲的权值转化为到根节点的权值 怎么转化呢? 每道题都不一样Q ...
- [POJ2912]Rochambeau(并查集)
传送门 题意: n个人分成三组,玩石头剪子布游戏,同一组的人只能出同样固定的的手势,其中有一个是裁判不属于任何组,可以出任意手势,给出m个信息x op y 表示x,y是从三个组里面随机抽取的或者是裁判 ...
- 洛谷1525 关押罪犯NOIP2010 并查集
问题描述 S城现有两座监狱,一共关押着N名罪犯,编号分别为1~N.他们之间的关系自然也极不和谐.很多罪犯之间甚至积怨已久,如果客观条件具备则随时可能爆发冲突.我们用“怨气值”(一个正整数值)来表示某两 ...
- NOI2001 食物链【扩展域并查集】*
NOI2001 食物链 动物王国中有三类动物 A,B,C,这三类动物的食物链构成了有趣的环形.A 吃 B,B吃 C,C 吃 A. 现有 N 个动物,以 1 - N 编号.每个动物都是 A,B,C 中的 ...
- C++食物链【NOI2001】 并查集+建虚点
B. 食物链[NOI2001] 内存限制:256 MiB 时间限制:1000 ms 标准输入输出 题目类型:传统 评测方式:文本比较 题目描述 动物王国中有三类动物A,B,C,这三类动物的食物链构成了 ...
随机推荐
- python之select与selector
select/poll/epoll的区别 I/O多路复用的本质就是用select/poll/epoll,去监听多个socket对象. 参考:Linux IO模式及 select.poll.epoll详 ...
- 第四章 Jinja2模版
模板简介: 在之前的章节中,视图函数只是直接返回文本,而在实际生产环境中的页面大多是带有样式和复杂逻辑的HTML代码,这可以让浏览器渲染出非常漂亮的页面.目前市面上有非常多的模板系统,其中最知名好用的 ...
- macOS上更顺手的终端
安装iTerm2.下载地址 https://iterm2.com/downloads/stable/latest 安装Nerd Fonts.下载地址 https://github.com/ryanoa ...
- 【SaltStack官方版】—— returners——返回器
ETURNERS 返回器 By default the return values of the commands sent to the Salt minions are returned to t ...
- 爬虫代理池源代码测试-Python3WebSpider
元类属性的使用 来源: https://github.com/Python3WebSpider/ProxyPool/blob/master/proxypool/crawler.py 主要关于元类的使用 ...
- bbs项目---表关系
表关系 用户表个人博客表点赞表文章表文章描述表文章和标签多对多关系表评论表分类表标签表 表关系设计示例收集: 1 https://bbs.csdn.net/topics/390260474 2 上图博 ...
- javascript数据结构之队列
首先什么是队列? 排队买东西就是生活中队列的实际例子,在队伍中大家必须按照顺序来,不能插队,新来的人只能排在队伍的最后面.新加入的人相当于队列的后端加入的元素,队伍最前面买完东西的人离开队伍相当于是队 ...
- 平衡Dom总结
介绍: 新的项目中有些Dom元素需要和画布保持统一个适配比例 项目地址: 宝岛之光-台湾偶像剧 遇到的问题 H5项目使用Canvas, 适配采用保持宽高比例, 上下或者左右留白方式 在项目中有些Dom ...
- $\LaTeX$数学公式大全
$\LaTeX$数学公式大全$1\ Geek\ and\ Hebrew\ letters$ $\LaTeX$数学公式大全$2\ Math\ Constructs$ $\LaTeX$数学公式大全$3\ ...
- Sublime Text 使用笔记(大全呀,菜鸟必看)
下载和安装 Sublime Text2是一款开源的软件,不需要注册即可使用(虽然没有注册会有弹窗,但是基本不影响使用). 下载地址:http://www.sublimetext.com ,请自行根据系 ...