#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 ;
}

最新文章

  1. H5 Notes:PostMessage Cross-Origin Communication
  2. 搭建Android底层开发环境
  3. Oracle 11.2.0.1的一个Bug,客户端报ORA-03113: 通信通道的文件结尾
  4. linux 命令总结
  5. javascript学习-原生javascript的小特效(简单的运动效果)
  6. java,UDP协议简单实现
  7. ARM architectures
  8. hdu 4670 树的点分治
  9. javascript 一串DIV跟随鼠标移动
  10. Inside Qt Series (全集)
  11. cocos2d-x: 33种切换场景
  12. 苹果(APPLE)开发人员账号说明及注冊流程(99美元公司版/个人版及299美元企业版)
  13. HTML ——Flex弹性布局
  14. Maven学习-Profile详解
  15. GHO2VMDK转换工具分享含VS2010源码
  16. ubuntu小技巧(不定期更新)
  17. 43.Linux调试测试输入思路
  18. [BZOJ2761] [JLOI2011] 不重复数字 (set)
  19. Chrome 控制台报错Unchecked runtime.lastError: The message port closed before a response was received
  20. jeesite 下载ckfinder上传的文件

热门文章

  1. Java中的Calendar日历用法详解
  2. jstree API
  3. HTML 列表实例
  4. pycharm常用的一些快捷键
  5. LeetCode-97.交错字符串
  6. 公钥与私钥的理解,以及https的应用原理
  7. [Week17] 个人阅读作业
  8. 黄金分割点(第五周 c语言版)
  9. Docker(二十六)-Docker Compose编排容器
  10. Docker 下 mysql 简单的 主从复制实现