文章目录

  • 食物链
  • 思路
  • AC代码

食物链

题目描述
动物王国中有三类动物 A,B,C,这三类动物的食物链构成了有趣的环形。A 吃 B,B 吃 C,C 吃 A。

现有 N 个动物,以 1 - N 编号。每个动物都是 A,B,C 中的一种,但是我们并不知道它到底是哪一种。

有人用两种说法对这 N 个动物所构成的食物链关系进行描述:

第一种说法是 1 X Y,表示 X 和 Y 是同类。
第二种说法是2 X Y,表示 X 吃 Y 。
此人对 N 个动物,用上述两种说法,一句接一句地说出 K 句话,这 K 句话有的是真的,有的是假的。当一句话满足下列三条之一时,这句话就是假话,否则就是真话。

当前的话与前面的某些真的话冲突,就是假话
当前的话中 X 或 Y 比 N 大,就是假话
当前的话表示 X 吃 X,就是假话
你的任务是根据给定的 N 和 K 句话,输出假话的总数。

输入格式
第一行两个整数,N,K,表示有 N 个动物,K 句话。

第二行开始每行一句话(按照题目要求,见样例)

输出格式
一行,一个整数,表示假话的总数。

输入输出样例
输入

100 7
1 101 1
2 1 2
2 2 3
2 3 3
1 1 3
2 3 1
1 5 5

输出

3

说明/提示
1 ≤ N ≤ 5 ∗ 10^4

1 ≤ K ≤ 10^5

思路


例如
1 1 3表示1 和 3是同类,那么merge(1,3)来维护本身关系,merge(1 + 3,3 + 3)维护被捕食者的关系,merge(1 + 6,3 + 6)维护天敌的关系
2 1 2表示 1 和 2是捕食这的关系,那么(1 + 3, 2)维护捕食者的关系,merge(1,2 + 6)维护猎物的关系,merge(1 + 6,2 + 3)维护天敌的关系

AC代码

#include<bits/stdc++.h>
const int maxn = 2e5 + 5;
int n,k,i,z,x,y,ans;
int pre[maxn];
int find(int x){//找祖宗函数if(x==pre[x]) return x;return pre[x] = find(pre[x]);
}
void merge(int x,int y){//合并函数int fx = find(x);int fy = find(y);if(fx!=fy)pre[fx]=fy;
}
int main(){scanf("%d %d",&n,&k);for(i=1;i<=3*n;i++){pre[i]=i;}for(i=1;i<=k;i++){scanf("%d %d %d",&z,&x,&y);if(x>n||y>n){//数据超出范围显然直接弹出ans++;continue;}if(z==1){if(find(x+n)==find(y)||find(x+2*n)==find(y)){//如果x和y是捕食关系显然也不行ans++;}else{merge(x,y);//x和y是一个种类merge(x+n,y+n);//x和y的猎物也是一个种类merge(x+2*n,y+2*n);//x和y的天敌也是一个种类}}else if(z==2){if(find(x)==find(y)||find(x+2*n)==find(y)){//如果x和y是一个种类或者y是x的天敌显然不行ans++;}else{merge(x+n,y);//x的猎物是ymerge(x+2*n,y+n);//x的天敌是y的猎物merge(x,y+2*n);//x是y的天敌}}}printf("%d",ans);return 0;
}

食物链 (种类并查集)相关推荐

  1. POJ1182 食物链 —— 种类并查集

    题目链接:http://poj.org/problem?id=1182 食物链 Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: ...

  2. POJ1182 食物链---(经典种类并查集)

    题目链接:http://poj.org/problem?id=1182 食物链 Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: ...

  3. 食物链(种类并查集)

    一般我们的并查集是可以维护这样的关系的,比如亲戚的亲戚是亲戚,只需要简单调用并查集就可以实现.但如果我们现在想要维护一个这样的关系,比如敌人的敌人是朋友,那一般的并查集就不行了,对于一般的并查集而言, ...

  4. 【POJ - 1703】Find them, Catch them(带权并查集之--种类并查集 权为与父节点关系)

    题干: Find them, Catch them Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 36176   Accep ...

  5. Bailian1182 POJ1182 食物链【并查集】

    1182:食物链 描述 动物王国中有三类动物A,B,C,这三类动物的食物链构成了有趣的环形.A吃B, B吃C,C吃A. 现有N个动物,以1-N编号.每个动物都是A,B,C中的一种,但是我们并不知道它到 ...

  6. 【C语言】算法学习·种类并查集

    一般的并查集,维护的是具有连通性.传递性的关系,例如亲戚的亲戚是亲戚.但是,有时候,我们要维护另一种关系:敌人的敌人是朋友.种类并查集就是为了解决这个问题而诞生的. 我们先来看一个例题: 其实很容易想 ...

  7. Poj(1703),种类并查集

    题目链接:http://poj.org/problem?id=1703 已经不是第一次接触种类并查集了,直到今天才搞懂. 感谢红黑联盟,感谢杰哥!!! 每个节点只要关系确定,不管是不是同一个集合里面, ...

  8. BZOJ 1370: [Baltic2003]Gang团伙 [并查集 拆点 | 种类并查集WA]

    题意: 朋友的朋友是朋友,敌人的敌人是朋友:朋友形成团伙,求最多有多少团伙 种类并查集WA了一节课,原因是,只有那两种关系才成立,诸如朋友的敌人是朋友之类的都不成立! 所以拆点做吧 #include ...

  9. poj 1703(种类并查集)

    题目大意:在这个城市里有两个黑帮团伙,现在给出N个人,问任意两个人他们是否在同一个团伙 输入D x y代表x于y不在一个团伙里 输入A x y要输出x与y是否在同一团伙或者不确定他们在同一个团伙里 解 ...

最新文章

  1. 【面试必备】javascript操作DOM元素
  2. ASP.NET WebHooks RC 1发布
  3. js获取当前时间格式YYYY/MM/DD
  4. 【转】DICOM开发工具总结
  5. 3d页游开发_大翅膀等于页游风?天谕手游扭转印象,阿云嘎同款黑翅膀最有排面...
  6. vmware vsphere powercli 因为在此系统中禁止执行脚本
  7. CPU虚拟化的常见技术
  8. 马屁股和航天飞机的关系
  9. c语言转化音乐格式转换器安卓版,音频提取格式转换
  10. 统一认证 ldap mysql_LDAP简述及统一认证说明
  11. Butterworth低通滤波器 Matlab实现
  12. delphi 各版本的特性
  13. 运行edX Devstack
  14. lifecycle-aware components(生命周期感知组件用法和原理)
  15. 十大常见食物让牙齿越吃越白。
  16. 怎么使用Google GSC(原google站长工具)?
  17. Gherkin语法详解之Data Format(七)
  18. 设计模式学习笔记(C++实现)(七)--适配器模式
  19. 【C++】set/multiset/map/multimap
  20. 阿里云服务器优惠活动中的突发性/共享型/计算型/通用型实例怎么选

热门文章

  1. Error response from daemon: Container 2c6d35b44a9862c63a6caf11a5622a33fe27979e12e51f9bd96f8dad98521c
  2. 网络模拟环境 NS-2仿真软件简介
  3. 《炬丰科技-半导体工艺》硅片湿法清洗技术
  4. C# BLE蓝牙开发之使用Windows.Devices.Bluetooth获取小米体重秤的体重
  5. go用函数字符串名调用函数
  6. 密码加密解密(一)——摩斯密码
  7. 【CSS】CSS中alt属性和title属性用法
  8. 一个电商数据分析师的经验总结
  9. 配置mysql数据库端口号_数据库配置时要注意端口号
  10. Learun FrameWork,基于.NET的智能化开发工具