\(\\\)

Description


有三类动物 \(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\le 5\times 10^4,K\le 10^5\)

\(\\\)

Solution


扩展域的并查集。

建立三个域,分别为 \(x,x+n,x+2n\)。

如果 \(x,y\) 在一个集合里,代表 \(x,y\) 是同类。

如果 \(x+n,y\) 在一个集合里,代表 \(y\) 为 \(x\) 的捕食对象。

如果 \(x+2n,y\) 在一个集合里,代表 \(y\) 为 \(x\) 的天敌。

注意这里以 \(x\) 为中心构建的集合,具有代表意义。

即 \(x+n,x+2n\) 只作为中转点,所在的集合中所有 \(n\) 范围内的点含义相同。

\(\\\)

对于同类语句:

如果某一个是另一个的天敌或捕食对象 \(GG\) 。

否则合并两者的三个集合。

\(\\\)

对于捕食语句 \((x\) 捕食 \(y)\):

如果两者是同类 \(GG\) 。

如果 \(y\) 是 \(x\) 的天敌 \(GG\) 。

因为只有三个集合,所以合并:

  • \(x\) 和 \(y+2n\): \(x\) 是 \(y\) 的天敌。

  • \(x+n\) 和 \(y\) : \(y\) 是 \(x\) 的捕食对象。

  • \(x+2n\) 和 \(y+n\) :第三类关系,\(x\) 的天敌一定是 \(y\) 的捕食对象。

\(\\\)

在这个过程中应该有一些思考。

合并的有效对象其实一直是 \([1,n]\) 范围内的点,而我们只是通过等价关系借用了两个扩展域合并。

所有的查询也是借用定义,实则查的其实还是 \([1,n]\) 范围内的点。

\(\\\)

Code


#include<cmath>
#include<cstdio>
#include<cctype>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>
#define N 150010
#define R register
#define gc getchar
using namespace std;inline int rd(){int x=0; bool f=0; char c=gc();while(!isdigit(c)){if(c=='-')f=1;c=gc();}while(isdigit(c)){x=(x<<1)+(x<<3)+(c^48);c=gc();}return f?-x:x;
}int n,m,ans,f[N];inline void reset(){for(R int i=1;i<N;++i) f[i]=i;}int find(int x){return x==f[x]?x:f[x]=find(f[x]);}inline void merge(int x,int y){f[find(x)]=find(y);}int main(){n=rd(); m=rd(); reset();for(R int i=1,op,x,y;i<=m;++i){op=rd(); x=rd(); y=rd();if(x>n||y>n){++ans;continue;}if(op==1){if(find(x)==find(y+n)||find(x)==find(y+2*n)){++ans;continue;}merge(x,y); merge(x+n,y+n); merge(x+n*2,y+n*2);}else{if(x==y){++ans;continue;}if(find(x)==find(y)||find(x+2*n)==find(y)){++ans;continue;}merge(x,y+n*2); merge(x+n,y); merge(x+n*2,y+n);}}printf("%d\n",ans);return 0;
}

转载于:https://www.cnblogs.com/SGCollin/p/9917515.html

[ NOI 2001 ] 食物链相关推荐

  1. NOI[2001]食物链

    今天写了道并查集的题,看来并查集的题刷少了,,,,,用法好神奇啊!!!开三倍并查集 用i表示自己,i+n存天敌,i+2*n存可以克制de,再逻辑判断一下即可. 所以,要意识到并查集的分类处理可以开不同 ...

  2. [题解]NOI 2001 食物链

    发个题目链接吧 http://www.cqoi.net:2012/JudgeOnline/problem.php?id=1356 [题解] 在高一妹纸的推荐下看的这道题,发现NOI竟然有水题啊啊,果断 ...

  3. AC日记——食物链 codevs 1047

    1074 食物链 2001年NOI全国竞赛  时间限制: 3 s  空间限制: 64000 KB  题目等级 : 钻石 Diamond 题解 题目描述 Description 动物王国中有三类动物 A ...

  4. 【codevs1074】食物链

    食物链 2001年NOI全国竞赛 时间限制: 3 s 空间限制: 64000 KB 题目等级 : 钻石 Diamond 题解 查看运行结果 题目描述 Description 动物王国中有三类动物 A, ...

  5. wikioi-天梯-提高一等-并查集-1074:食物链

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

  6. POJ 1703 Find them, Catch them(并查集高级应用)

    POJ 1703 Find them, Catch them(并查集高级应用) 手动博客搬家:本文发表于20170805 21:25:49, 原地址https://blog.csdn.net/sunc ...

  7. NOI 题目 试题 目录 信奥 历年

    NOI  题目  试题 目录 信奥 历年 NOI  2018 题目  试题 目录 信奥 历年 第一试   2018年7月18日   08:00-13:00 1.归程  return 2.冒泡排序    ...

  8. 1734: 炮兵阵地

    1734: 炮兵阵地 [命题人 : #include <queue> #include <math.h> #include <stack> #include < ...

  9. 【NOIOL】【数论 / 数值】正反切函数的应用

    题目描述 反正切函数可展开成无穷级数,有如下公式 (其中) 使用反正切函数计算是一种常用的方法.例如,最简单的计算的方法: 然而,这种方法的效率很低,但我们可以根据角度和的正切函数公式: 通过简单的变 ...

最新文章

  1. opengl加载显示3D模型SMD类型文件
  2. MySQL 黑洞引擎的使用场景解释
  3. jbehave_使用JBehave,Gradle和Jenkins的行为驱动开发(BDD)
  4. Effective STL(第7条)
  5. 方向盘左右能摇动_金澳小贴士——通过方向盘,竟能看出这些汽车故障!
  6. cmd查看所有数据库 db2_民生银行数据库自动化部署的探索与实践
  7. easyui源码翻译1.32--Window(窗口)
  8. 用MDT 2012为企业部署windows 7(四)--创建Deploymentshare共享以及介绍一些选项的具体作用...
  9. apache开源项目--thrift
  10. ThinkPHP截取部分文章文字、字符串
  11. 【免费分享】全新DHPST分销系统/YEP分销/云主机分销系统源码
  12. 使用phpQuery 抓取HTML 页面内容
  13. 计算机辅助设计职业标准,计算机辅助设计绘图员国家职业标准.doc
  14. 2020-Point attention network for semantic segmentation of 3D point clouds
  15. SQL注入:搜索型注入
  16. 开发一款简单的百度小程序(由微信小程序迁移过来)
  17. word中怎么每页设置50行 wps中怎么每页设置50行
  18. Go 实现 json 格式定义 http 协议压测脚本
  19. 物联网中,北向接口和南向接口是什么?
  20. HTML颜色代码表,网页颜色代码表

热门文章

  1. java创建项目出现怎么办_maven创建项目后main/java missing的解决方法
  2. mysql 数据转换dataset_【转】dataset和实体类 之间的转换
  3. eventlistener java_EventListener原理
  4. NPOI从数据库中导出数据到Excel
  5. mysql数据库1129错误
  6. android性能调优的工具,神兵利器-Android 性能调优工具 Hugo
  7. arp协议属于哪一层_ARP的攻击与防御
  8. svm中的数学和算法
  9. 鸿蒙系统可以安装teams吗,鸿蒙致命弱点被曝光!不能装这个软件,80%用户将望而却步!...
  10. 2015-UNet论文翻译