1074 食物链 2001年NOI全国竞赛
1074 食物链
2001年NOI全国竞赛
动物王国中有三类动物 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句话有的是真的,有的是假的。当一句话满足下列三条之一时,这句话就是假话,否则就是真话。
1) 当前的话与前面的某些真的话冲突,就是假话;
2) 当前的话中X或Y比N大,就是假话;
3) 当前的话表示X吃X,就是假话。
你的任务是根据给定的N(1<=N<=50,000)和K句话(0<=K<=100,000),输出假话的总数。
第一行是两个整数N和K,以一个空格分隔。
以下K行每行是三个正整数D,X,Y,两数之间用一个空格隔开,其中 D 表示说法的种类。
若D=1,则表示X和Y是同类。
若D=2,则表示X吃Y。
只有一个整数,表示假话的数目。
100 7
1 101 1
2 1 2
2 2 3
2 3 3
1 1 3
2 3 1
1 5 5
3
输入文件
对7句话的分析 100 7
1 101 1 假话
2 1 2 真话
2 2 3 真话
2 3 3 假话
1 1 3 假话
2 3 1 真话
1 5 5 真话
NOI 2001 食物链(eat)
数组一定要开的足够大
对每个对象有3种状态。我们可以开3倍的数组,分别维护对象的三种状态。(因为我们无法确定该对象是A/B/C中的哪种)。
fa[i]、fa[i+n]、 fa[i+2n]
如果对象X,Y是同类。
则我们将3个状态分别连边。
fa[x] <-> fa[y]
fa[x+n]<->fa[y+n]
fa[x+2*n]<->fa[y+2*n]
如果X、Y不是同类存在捕食关系。(设X eat Y)
则我们将
fa[x] <-> fa[y+n] (A->B)
fa[x+n] <-> fa[y+2*n] (B->C)
至于什么要连
fa[x+2*n] <-> fa[y] (C->A)
(其实不连好像也可以,但是我写不出来)
我们需要描述3种关系。
- 同类关系。
- 捕食关系
- 被捕食关系
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int MAXN=;
const int maxn=0x7fffffff;
int tot=;
int f[MAXN];// 同伙
int x,y;
int fx1,fx2,fx3,fy1,fy2,fy3;
int find(int x)
{
if(f[x]!=x)
f[x]=find(f[x]);
return f[x];
}
int unionn(int x,int y)
{
f[x]=y;
}
int main()
{
int n,m;
scanf("%d%d",&n,&m);
for(int i=;i<=n*;i++)
f[i]=i;
for(int i=;i<=m;i++)
{
int p;
scanf("%d",&p);
if(p==)// x y 是同类
{
int x,y;
scanf("%d%d",&x,&y);
if((x>n||y>n))
{
tot++;
continue;
}
fx1=find(x);
fx2=find(x+n);
fx3=find(x+*n);
fy1=find(y);
fy2=find(y+n);
fy3=find(y+*n);
if(fx1==fy2||fx1==fy3)
{
tot++;
continue;
}
else
{
unionn(fx1,fy1);
unionn(fx2,fy2);
unionn(fx3,fy3);
}
}
else // x吃y
{
scanf("%d%d",&x,&y);
if((x>n||y>n)||(x==y))
{
tot++;
continue;
}
fx1=find(x);
fx2=find(x+n);
fx3=find(x+*n);
fy1=find(y);
fy2=find(y+n);
fy3=find(y+*n);
if(fx1==fy1||fx1==fy3)
{
tot++;
continue;
}
else
{
unionn(fx1,fy2);
unionn(fx2,fy3);
unionn(fx3,fy1);
}
}
}
printf("%d",tot);
return ;
}
1074 食物链 2001年NOI全国竞赛的更多相关文章
- Codevs 1074 食物链 2001年NOI全国竞赛
1074 食物链 2001年NOI全国竞赛 时间限制: 3 s 空间限制: 64000 KB 题目等级 : 钻石 Diamond 传送门 题目描述 Description 动物王国中有三类动物 A,B ...
- CODEVS 1074 食物链 2001年NOI全国竞赛(洛谷 P2024)
题目描述 Description 动物王国中有三类动物 A,B,C,这三类动物的食物链构成了有趣的环形.A吃B,B吃C,C吃A. 现有N个动物,以1-N编号.每个动物都是A,B,C中的一种,但是我们并 ...
- 食物链 2001年NOI全国竞赛
时间限制: 3 s 空间限制: 64000 KB 题目等级 : 钻石 Diamond 题目描述 Description 动物王国中有三类动物 A,B,C,这三类动物的食物链构成了有趣的环形.A吃B ...
- Codevs 1800 假面舞会 2008年NOI全国竞赛
1800 假面舞会 2008年NOI全国竞赛 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 大师 Master 题目描述 Description 一年一度的假面舞会又开始了,栋栋也 ...
- 1729 单词查找树 2000年NOI全国竞赛
1729 单词查找树 2000年NOI全国竞赛 时间限制: 2 s 空间限制: 128000 KB 题目等级 : 大师 Master 题目描述 Description 在进行文法分析的 ...
- 2008年NOI全国竞赛 假面舞会
/* 分三种情况 1 有环:找环长的gcd作为max gcd的超过2的最小因子作为min 2 树:所有最长链的和作为max 3为min (最长链≥3) 3 两条相交链:找出所有的这样的两条链的差 同1 ...
- 1722 最优乘车 1997年NOI全国竞赛
题目描述 Description H城是一个旅游胜地,每年都有成千上万的人前来观光.为方便游客,巴士公司在各个旅游景点及宾馆,饭店等地都设置了巴士站并开通了一些单程巴上线路.每条单程巴士线路从某个巴士 ...
- 银河英雄传说 2002年NOI全国竞赛
时间限制: 1 s 空间限制: 256000 KB 题目等级 : 大师 Master 题目描述 Description 公元五八○一年,地球居民迁移至金牛座α第二行星,在那里发表银河联邦创立宣言,同年 ...
- NOI全国赛(2001)--食物链
今天写了道并查集的题,看来并查集的题刷少了,,,,,用法好神奇啊!!!开三倍并查集 用i表示自己,i+n存天敌,i+2*n存可以克制de,再逻辑判断一下即可. 所以,要意识到并查集的分类处理可以开不同 ...
随机推荐
- JConsole远程监控配置
首先,看本机(Windows)安装了JRE没 Win > CMD 打开命令窗口 如有安装,则会显示以下版本信息:若没有显示,就安装吧 C:\Users\Administrator>java ...
- 07_ddms透视图介绍
通过ADB(Android Debug Bridge)安卓调试桥把你的Eclipse(集成开发环境)和你的设备连接在一起.有时候ADB可能会被其他的东西占用.例如WPS会跟你抢ADB(抢端口).如果你 ...
- Git merge一个branch到另一个branch
在项目开发过程中,需要merge一个branch (branch名 taskBranch) 到另一个名为develop 的branch 方法: 先保证当前停留在develop的branch上 然后执行 ...
- Java静态导入
Java静态导入 静态导入的语法是: import static ...; 静态导入的好处就是可以简化一些操作,例如System.out.println(…);就可以将其写入一个静态方法 import ...
- 删除docker私有仓库中的镜像
1.搭建私有仓库 (1)拉取私有仓库镜像 docker pull registry(2)启动私有仓库容器 docker run ‐di ‐‐name=registry ‐p 5000:5000 reg ...
- python 基于 wordcloud + jieba + matplotlib 生成词云
词云 词云是啥?词云突出一个数据可视化,酷炫.以前以为很复杂,不想python已经有成熟的工具来做词云.而我们要做的就是准备关键词数据,挑一款字体,挑一张模板图片,非常非常无脑.准备好了吗,快跟我一起 ...
- Nginx + Tomcat7 + redis session一致性问题
Nginx 作负载均衡时,由于是每次都需要把请求分发到不同的机器,同一个用户在一台机器上创建了 session,下一次的请求很有可能会转发到另外一台机器,会造成 session 丢失.我们可以使用 R ...
- Python Day24
AJAX 对于WEB应用程序:用户浏览器发送请求,服务器接收并处理请求,然后返回结果,往往返回就是字符串(HTML),浏览器将字符串(HTML)渲染并显示浏览器上. 1.传统的Web应用 一个简单操作 ...
- Travelling (三进制+状压dp)
题目链接 #include <bits/stdc++.h> using namespace std; typedef long long ll; inline ll read(){ ,f= ...
- 关于Git的一些操作记录
本文是我的一些记录,不按教学顺序 1.如何添加不上传的文件或文件夹,并且将已经添加到远程库的文件夹删除 操作过程如下: vim .gitignore // 按i进入编辑模式 写入 node_modul ...