ACM食物链
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句话有的是真的,有的是假的。当一句话满足下列三条之一时,这句话就是假话,否则就是真话。
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。
输出:
只有一个整数,表示假话的数目。
Sample Input
100 7
1 101 1
2 1 2
2 2 3
2 3 3
1 1 3
2 3 1
1 5 5
Sample Output
3
#include<iostream>
int f[50001],r[50001];
int fs(int i)
{
if (f[i]==i) return i;
int t=f[i];
f[i]=fs(f[i]);
r[i]=(r[t]+r[i])%3;
return f[i];
}
void un(int x,int y,int h)
{
int a=fs(x),b=fs(y);
f[a]=b;
r[a]=(r[y]-r[x]+3+h)%3;
}
int main()
{
int n,k,i,ans(0);
scanf("%d%d\n",&n,&k);
for (i=1;i<=n;++i) f[i]=i;
for (i=0;i<k;i++) {
int d,x,y;
scanf("%d%d%d",&d,&x,&y);
if (x>n || y>n) {++ans;continue;}
if (d==1) {
if (fs(x)==fs(y)) {
if (r[x]!=r[y]) ++ans;
} else un(x,y,0);
} else {
if (fs(x)==fs(y)) {
if (r[x]!=(r[y]+1)%3) ++ans;
} else un(x,y,1);
}
}
printf("%d\n",ans);
return 0;
}
分享到:
相关推荐
详细讲述了acm的编程及各种算法知识,书中代码全部用c++实现,对c++泛型编程也有着极大地帮助
这是一道比较经典的剪枝题目,如果不仔细考虑到 题目特性,就不能了解到搜索的速度
这个“基于C++实现的ACM竞赛常用模板”是一个集成了ACM比赛常见问题解决方案的代码库,可以帮助参赛者快速理解和解决各种竞赛题目。 首先,模板通常包括基础数据结构和算法的实现,例如: 1. **排序算法**:快速...
《ACM ICPC程序设计与分析(C++实现)》是一本专为参与ACM国际大学生程序设计竞赛(International Collegiate Programming Contest, 简称ICPC)的参赛者及对此领域感兴趣的程序员编写的指导书籍。书中深入探讨了在...
**基于C++的ACM模板**是用于解决算法竞赛(如国际大学生程序设计竞赛ICPC或ACM/ICPC)中的编程问题的一种高效框架。在这些竞赛中,参赛者需要编写程序来解决各种数学和逻辑问题,速度和准确性是关键。C++语言因其...
### ACM&C++实用技巧与模板库 #### 一、引言 在计算机科学领域,特别是针对ACM(Association for Computing Machinery)竞赛等编程比赛,掌握高效且简洁的编程技巧至关重要。C++作为这类比赛中最常用的语言之一,...
标题 "ACM杭电1002 C++程序" 指向的是一个与ACM国际大学生程序设计竞赛相关的题目,具体是杭州电子科技大学(Hangzhou Dianzi University)在线评测系统上的第1002号问题。这个问题要求用C++编程语言来解决大数相加...
基于C++实现的ACM-ACM竞赛常用模板文件 在ACM(国际大学生程序设计竞赛,International Collegiate Programming Contest)中,参赛团队需要使用编程语言解决一系列算法问题。C++作为一门强大的编程语言,因其高效、...
【标题】"北大acm_p1001试题c++版"所指的是一道源自北京大学ACM(国际大学生程序设计竞赛)的编程题目,它使用C++语言编写。ACM竞赛是全球知名的大学生编程比赛,旨在提升参赛者的算法设计、问题解决以及编程能力。...
acm吃糖果的题目,自己根据提示写的比较简单的代码,欢迎指正
基于C++实现的ACM-ACM竞赛常用模板源代码 在ACM(国际大学生程序设计竞赛,International Collegiate Programming Contest)中,参赛团队需要使用编程语言解决一系列算法问题。C++作为一门强大的编程语言,因其高效...
标题中的“poj acm300题 c++源码打包”表明这是一份包含300个在POJ(编程在线判题系统)上已通过的ACM竞赛题目解决方案的压缩文件,语言为C++。ACM,即国际大学生程序设计竞赛(International Collegiate ...
acm常用算法模板(C++版)
总的来说,这个基于C++的ACM-ICPC模板是参赛者在备赛过程中必不可少的工具,它可以帮助参赛者专注于算法设计,而不需要花费过多精力在代码实现的细节上。通过学习和使用这套模板,选手可以提升自己的编程效率,提高...
ACM模板和一些题目的代码实现c++源码.zipACM模板和一些题目的代码实现c++源码.zipACM模板和一些题目的代码实现c++源码.zipACM模板和一些题目的代码实现c++源码.zipACM模板和一些题目的代码实现c++源码.zipACM模板和...
**KMP算法实现模板(C++版) ACM算法** KMP(Knuth-Morris-Pratt)算法是一种在文本字符串中查找子串匹配的有效方法,尤其适用于已经预处理了模式串(子串)的匹配信息。它是由D.E. Knuth、V. Morris和J.H. Pratt...
标题中的“PTA.zip_ACM编程_C++_VC和PTA的环境_advicevcc_nailsxcl”表明这是一个关于ACM(国际大学生程序设计竞赛)编程训练的资源包,主要针对C++语言,并且讨论了在Visual C++(VC)环境中如何与PTA(Programming...
课件中的代码实现部分是实际编程技能的体现,通常包含了各种算法的C++或Java实现。这些代码可以帮助学习者直观地理解算法的运行过程,提高编程实战能力。通过阅读和分析代码,可以学习到如何高效地解决问题,优化...
1. 链表:链表是ACM竞赛中常用的动态数据结构,用于实现队列、栈等。C++中的list和forward_list提供了链表操作。 2. 树结构:二叉树、平衡树(如AVL树、红黑树)在解决搜索和排序问题时非常有用。掌握基本的插入、...