题目描述

动物王国中有三类动物 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 句话,输出假话的总数。

输入输出格式

输入格式:

从 eat.in 中输入数据

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

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

输出格式:

输出到 eat.out 中

一行,一个整数,表示假话的总数。

输入输出样例

输入样例#1:

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

输出样例#1:

3

说明

1 ≤ N ≤ 5 ∗ 10^4

1 ≤ K ≤ 10^5

分析

知识点:并查集。

由关押罪犯的2个集合变成了3个集合。不会做的话可以先去做关押罪犯。

代码

#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
using namespace std;
const int maxn=50000+5;
inline int read()
{int x=0,f=1; char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-')f=-1; ch=getchar();}while(ch>='0'&&ch<='9'){x=x*10+ch-'0'; ch=getchar();}return x*f;
}
int n,k,ans;
int father[maxn*3];
inline int find(int x)
{if(x!=father[x]) father[x]=find(father[x]);return father[x];
}
inline void merge(int x,int y)
{int r1=find(x);int r2=find(y);father[r1]=r2;
}
int main()
{n=read();k=read();for(int i=1;i<=n*3;i++) father[i]=i;for(int i=1;i<=k;i++){int p,x,y;p=read();x=read();y=read();if(x>n||y>n){ans++; continue;}if(p==1){if(find(x+n)==find(y)||find(x+n*2)==find(y)){ans++; continue;}merge(x,y);merge(x+n,y+n);merge(x+n*2,y+n*2);}else if(p==2){if(find(x+2*n)==find(y)||find(x)==find(y)){ans++; continue;}merge(x+n,y);merge(y+2*n,x);merge(y+n,x+2*n);}}printf("%d\n",ans);return 0;
}

转载于:https://www.cnblogs.com/huihao/p/7618123.html

【洛谷P2024】食物链相关推荐

  1. 洛谷 最大食物链计数 python题解

    题目:P4017 最大食物链计数 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 题目描述 给你一个食物网,你要求出这个食物网中最大食物链的数量. (这里的"最大食物链&q ...

  2. 洛谷P3183食物链题解

    不得不说,这是道很难减少时间复杂度的题,且这个题有点像一道拓扑排序题,但是这个难度标签有点低. 我们应该可以想到拓扑排序可能是这个题的正解,但是题目中有输出总数,因此我们就可以造一个数组表示从这个点出 ...

  3. 洛谷or牛客数据结构+算法

    栈思想:先进后出 tips:栈里能放下标就放下标 (牛客)小c的计事本(直接用stack可以简化代码,且不会被自己绕晕,当时没意识到) (牛客)吐泡泡(没意识到用栈),(牛客)好串 1.后缀表达式(栈 ...

  4. 记忆优化搜索(简单题)(洛谷P3183 [HAOI2016]食物链 )( P5635 【CSGRound1】天下第一 )

    昨天做了蓝桥杯的时候,发现自己对于记忆优化搜索甚是不熟悉,所以今天随便找了几个基础题做做,顺便写下两片题解,顺便用了一下devc++敲的代码,发现没有代码补全真的可以说是灰常难受了... 洛谷P318 ...

  5. 拓扑排序——最大食物链计数(洛谷 P4017)

    题目选自洛谷P4017 这里具体讲一下为什么要用拓扑排序(思维过程): 1.这是一道图论题: 2.不是求最短路: 3.根据提示"最左端是不会捕食其他生物的生产者"可以想到,我们要入 ...

  6. 图解Topo拓扑排序 例题洛谷P4017 最大食物链计数

    适用条件:无环图 输出结果:使得每个节点,以它为终点的起点节点排都在其前面 作用:递推保证前面的节点都已经被使用过 实现方法:从没有入边的节点开始,输出并从其他节点中删去自己,重复此步骤直到所有节点都 ...

  7. 洛谷 - 试炼场(全部题目备份)

    整理的算法模板合集: ACM模板 目录 1.新手村 1 - 1 洛谷的第一个任务 1 - 2 顺序与分支 1 - 3 循环!循环!循环! 1 - 4 数组 1 - 5 简单字符串 1 - 6 过程函数 ...

  8. 洛谷--橙色百道DP总结

    最近刷完了洛谷橙色DP大约一百道,算是发现了一些套路,就部分题目做一些总结. 大概分为三类 第一类,九大背包及其衍生 第二类,经典DP模型,如LCS,LIS等 第三类,实际问题背景的普通,环形,树上D ...

  9. 洛谷-题解 P2672 【推销员】

    独门思路!链表加优先队列! 这题一望,贪心是跑不掉了,但是我贪心并不好,所以想到了一个复杂一些但思路更保稳的做法 思路: 1 因为是离线操作,所以我们可以倒着求,先求x=n的情况,因为那样直接就知道了 ...

最新文章

  1. M_Map画南海水深地形图
  2. 一个简单的三层架构例子(.NET入门)
  3. mac下shell给文件名批量加前缀
  4. date类before()方法的主要作用是_DateFormat类的子类:SimpleDateFormat
  5. 梦幻西游服务器每周几维护,梦幻西游5月6日维护公告:唯美版地图不再更新
  6. 送书 | 生物信息学习的一点体会
  7. Java算法之只出现一次的数字
  8. ORM框架之Mybatis(五)mybatis生成器配置文件说明以及生成的类的说明
  9. Vue的三个点es6知识,扩展运算符表达含义
  10. Beta 冲刺(7/7)
  11. 如何用getevent查看C-TouchPanel上报数据?
  12. 跑跑卡丁车显示服务器断开连接,win10系统电脑玩跑跑卡丁车出现与服务器断开连接的详细技巧...
  13. 树莓派更改python版本_为树莓派升级Python版本
  14. 【渝粤题库】国家开放大学2021春1054流通概论题目
  15. 【Java】 第六章 接口、lambda 表达式与内部类 Java核心技术卷1基础知识原书第10版 读书笔记
  16. host速度 mtk usb_[MTK] 如何修改usb驱动能力
  17. WebView加载页面出现白屏解决方案
  18. android平板f100,2C2A 100W大功率,SlimQ F100氮化镓充电器登陆众筹平台
  19. 链接脚本使用AT加载地址的总结
  20. 在西安,程序员的平均薪资是多少?同职场经验的不同职位薪资差距到底有多大?

热门文章

  1. Pandas 使用入门
  2. debian10 mariadb安装
  3. 难忘的一天——装操作系统(二)
  4. 写算子单元测试Writing Unit Tests
  5. deeplearning模型库
  6. 编译器设计-自下而上分析器-误差恢复-语义分析
  7. 2021年大数据常用语言Scala(十一):基础语法学习 方法参数
  8. [JavaScript] 探索JS中的函数秘密
  9. HarmonyOS UI 开发 vp ,fp , px 以及写具体数字的 理解
  10. wchar用wcout输出正常cout是?