#include <iostream>
#include <algorithm>
#include <cstring>
#include <cstdlib>
#include <cstdio>
using namespace std; const int maxn = * + ;
int par[maxn];
int Rank[maxn];
int N, K;
int T[maxn], X[maxn], Y[maxn]; //初始化n个元素
void init(int n)
{
for (int i = ; i < n; i++)
{
par[i] = i;
Rank[i] = ;
}
} //查询树的根
int Find(int x)
{
if (par[x] == x)
{
return x;
}
else
{
return par[x] = Find(par[x]);
}
} //合并x和y所述的集合
void unite(int x, int y)
{
x = Find(x);
y = Find(y);
if (x == y) return; if (Rank[x] < Rank[y]) {
par[x] = y;
}
else {
par[y] = x;
if (Rank[x] == Rank[y]) Rank[x]++;
}
} bool same(int x, int y)
{
return Find(x) == Find(y);
} void input()
{
scanf("%d%d", &N, &K);
for (int i = ; i < K; i++)
{
scanf("%d%d%d", &T[i], &X[i], &Y[i]);
}
} void solve()
{
input();
//初始化并查集
//元素x, x + N, x + 2*N 分别代表 x-A, y-B, x-C
init(N * ); int ans = ;
for (int i = ; i < K; i++)
{
int t = T[i];
int x = X[i] - , y = Y[i] - ; //把输入变成 0, ... , N-1 范围 //不正确的编号
if (x < || x >= N || y < || y >= N)
{
ans++;
continue;
} if (t == )
{
//"x和y属于同一类"的信息
if (same(x, y + N) || same(x, y + *N))
{
ans++;
}
else
{
//同属A,或B,或C类
unite(x, y);
unite(x + N, y + N);
unite(x + *N, y + *N);
}
}
else {
//"x吃y"的信息错,同为一类,或者隔了1类
if (same(x, y) || same(x, y + *N)) {
ans++;
}
else {
unite(x, y + N); // A -> B
unite(x + N, y + * N); // B -> C
unite(x + * N, y); // C -> A
}
}
}
printf("%d\n", ans);
} int main()
{
solve(); return ;
}

并查集:POJ 1182 食物链 复习的更多相关文章

  1. [并查集] POJ 1182 食物链

    食物链 Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 66294   Accepted: 19539 Description ...

  2. poj 1182 食物链 (带关系的并查集)

      食物链 Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 44835 Accepted: 13069 Description 动 ...

  3. poj 1182:食物链(种类并查集,食物链问题)

    食物链 Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 44168   Accepted: 12878 Description ...

  4. POJ 1182 食物链(种类并查集)

    食物链 Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 63592   Accepted: 18670 Description ...

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

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

  6. POJ 1182 食物链 (经典带权并查集)

    第三次复习了,最经典的并查集 题意:动物王国中有三类动物A,B,C,这三类动物的食物链构成了有趣的环形.A吃B, B吃C,C吃A. 现有N个动物,以1-N编号.每个动物都是A,B,C中的一种,但是我们 ...

  7. poj 1182 食物链 (并查集)

    http://poj.org/problem?id=1182 关于并查集 很好的一道题,开始也看了一直没懂.这次是因为<挑战程序设计竞赛>书上有讲解看了几遍终于懂了.是一种很好的思路,跟网 ...

  8. POJ 1182 食物链(并查集拆点)

    [题目链接] http://poj.org/problem?id=1182 [题目大意] 草原上有三种物种,分别为A,B,C A吃B,B吃C,C吃A. 1 x y表示x和y是同类,2 x y表示x吃y ...

  9. poj 1182 食物链(种类并查集 ‘初心者’)

    题目链接:http://poj.org/problem?id=1182 借着这题可以好好理解一下种类并查集,这题比较简单但挺经典的. 题意就不解释了,中问题. 关于种类并查集结局方法也是挺多的 1扩增 ...

随机推荐

  1. 初级字典树查找在 Emoji、关键字检索上的运用 Part-2

    系列索引 Unicode 与 Emoji 字典树 TrieTree 与性能测试 生产实践 在有了 Unicode 和 Emoji 的知识准备后,本文进入编码环节. 我们知道 Emoji 是 Unico ...

  2. Mysql基础命令(二)select查询操作

    条件查询 使用Where进行数据筛选结果为True的会出现在结果集里面 select 字段 from 表名 where 条件; # 例: select * from test_table where ...

  3. JMeter采用NON GUI模式时如何记录并查看错误

    在GUI模式下执行JMeter测试时,我们可以通过添加View Results Tree组件来查看JMeter请求的各类详情.那如果在正式测试场景中,当我们采用NON GUI模式时,遇到了断言或其他错 ...

  4. c语言数字图像处理(一):bmp图片格式及灰度图片转换

    本篇文章首先介绍了bmp图片格式,主要参考wiki上的内容,包括bmp文件的存储方式,对于一些常见的bmp文件格式都给了例子,并且对8位 16位RGB555 16位RGB565格式的bmp文件进行了简 ...

  5. 百度Hr分享,一个合格的数据工程师简历中必备技能?

    如果你是一名数据科学方面的求职者,你肯定想知道在简历上写些什么才能获得面试的机会:如果你想进入这个领域,你一定想知道具备哪些技术才能成为一名有竞争力的求职者. 在本文中,我们对Indeed中一千份数据 ...

  6. 揭秘memset与sizeof的结合使用方法

    memset与sizeof为什么经常结合起来用呢? 一.memset介绍 memset函数是C++中的一个函数,它将从给定地址开始,逐个字节刷内存,初始化它们为给定的参数. 基本用法: void * ...

  7. 对Java8 stream的简单实践

    最近学习很多Java8方面的新特性,特地做了一些简单的实践和总结. import java.util.*; import java.util.stream.Collectors; public cla ...

  8. Daily Scrum NO.4

    工作概况 符美潇(PM) 昨日完成的工作 1.Daily Scrum.日常会议及日常工作的分配和查收. 2.解决并录入了一个严重的过滤器BUG,该BUG会导致获取子链接的严重异常. 3.在TFS上进行 ...

  9. Sprint计划会议内容

    项目名称:蹭课神器 会议内容 首先我们讨论了项目的工作量及实施流程 一.工作认领 二.界面的总体规划 三.主要功能的设计 四.设计数据库 五.编写项目报告 六.软件测试和推广 然后我们进行了工作认领, ...

  10. Controller Plane

    Toward Highly Available and Scalable Software Defined Networks for Service Providers IEEE Communicat ...