#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. 【分享】Java学习之路:不走弯路,就是捷径

    1.如何学习程序设计? JAVA是一种平台,也是一种程序设计语言,如何学好程序设计不仅仅适用于JAVA,对C++等其他程序设计语言也一样管用.有编程高手认为,JAVA也好C也好没什么分别,拿来就用.为 ...

  2. python中字符串的常见操作方法

    1. 字符串概念,字符串是一个容器,包含若干个字符并按照一定的顺序组织成一个整体.字符串支持索引操作. 2. 创建字符串基本语法 变量名 = "字符串信息" 变量名 = '字符串信 ...

  3. Apache Ignite 学习笔记(三): Ignite Server和Client节点介绍

    在前两篇文章中,我们把Ignite集群当做一个黑盒子,用二进制包自带的脚本启动Ignite节点后,我们用不同的客户端连接上Ignite进行操作,展示了Ignite作为一个分布式内存缓存,内存数据库的基 ...

  4. 【zigbee 】2.4G信号发放器 AT2401C PA功放

    概述 AT2401C 是一款面向Zigbee,无线传感网络以及其他2.4GHz 频 段无线系统的全集成射频功能的射频前端单芯片.AT2401C 是采用 CMOS 工艺实现的单芯片器件,其内部集成了功率 ...

  5. 3月web前端面试小结

    说一下box-sizing的应用场景 box-sizing的属性值分为两个,border-box和content-box,其中, border-box:width=content+padding+bo ...

  6. PHP密码的六种加密方式

    1. MD5加密 string md5 ( string $str [, bool $raw_output = false ] ) 参数 str  --  原始字符串. raw_output  --  ...

  7. 20172308 实验五《Java面向对象程序设计 》实验报告

    20172308 2017-2018-2 实验五 <网络编程与安全>报告 课程:<程序设计与数据结构> 班级: 1723 姓名: 周亚杰 学号:20172308 实验教师:王志 ...

  8. 做业5.2 TDD

    package runok;import java.util.*;import java.awt.*;import java.awt.event.ActionEvent;import java.awt ...

  9. We are a team----sh_6666

    团队宣言:编程,我们是玩命的,玩命,我们是认真的. 团队简介: 团队名称:sh_6666队 团队博客链接:http://www.cnblogs.com/sh-6666/ 人物简介: 剧团导演:吴小勇 ...

  10. HDU 2022 海选女主角

    http://acm.hdu.edu.cn/showproblem.php?pid=2022 Problem Description potato老师虽然很喜欢教书,但是迫于生活压力,不得不想办法在业 ...