动物王国中有三类动物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),输出假话的总数。
Input
第一行是两个整数N和K,以一个空格分隔。
以下K行每行是三个正整数 D,X,Y,两数之间用一个空格隔开,其中D表示说法的种类。
若D=1,则表示X和Y是同类。
若D=2,则表示X吃Y。
Output
只有一个整数,表示假话的数目。
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

AC代码:

include

include

using namespace std;
const int maxn=50000+50;
int a[3*maxn+1],s,N;
int find(int b){
if(a[b]==b) return b;
else return a[b]=find(a[b]);
}
/int find(int b){
while(b!=a[b]){
b=a[b];
}
return b;
}
/
void unite(int b,int c){
int x=find(b),y=find(c);
a[y]=x;
}
void diff(int b,int c){
int x=find(b),y=find(c),y1=find(c+2N);
if(x==y||x==y1||b==c) s++;
else {
unite(b,c+N);
unite(b+N,c+2
N);
unite(b+2N,c);
}
}
void init(){
for(int i=1;i<=3
N+10;i++)
a[i]=i;
}
void same(int b,int c){
int x=find(a[b]),x1=find(a[c+2*N]),y1=find(a[c+N]);
if(x==y1||x==x1) s++;
else{
unite(b,c);
unite(b+N,c+N);
unite(b+2N,c+2N);
}
}
int main(){
int K;
cin>>N>>K;
s=0;
init();
while(K--){
int a,b,c;
scanf("%d%d%d",&a,&b,&c);
if(b>N||c>N||c<1||b<1) {
s++;
continue;
}
if(a==1) same(b,c);
else diff(b,c);
// printf("%d %d\n",s,K);
}
printf("%d\n",s);
return 0;
}

注释:a[x]表示x在A中,a[x+N]表示x在B中,a[x+2*N]表示x在C中,将一种情况分成三种情况

最新文章

  1. js和css文件压缩
  2. 【PHP开发】国外程序员收集整理的 PHP 资源大全
  3. LSOF 安装与使用
  4. 使用jqgrid的C#/asp.net mvc开发者的福音 jqgrid-asp.net-mvc
  5. poj 1021矩阵平移装换后是否为同一个矩阵
  6. OpenProcess打开进程返回错误的问题
  7. 水流雨渍shader
  8. python操作mongodb之二聚合查询
  9. OpenCV源码阅读(3)---base.hpp
  10. net发布mvc项目
  11. 句柄(Handle)
  12. 解决treeview的同一节点单击多次的执行问题
  13. OpenCV——人脸检测
  14. 获取windows身份认证网站页面内容
  15. 【Chromium中文文档】Chromium如何展示网页
  16. JDBC (二)
  17. python之正则表达式和re模块一
  18. kubernetes集群应用部署实例
  19. git 操作规范
  20. Java RMI HelloWorld

热门文章

  1. 待补 http://acm.hdu.edu.cn/showproblem.php?pid=6602
  2. C# 共享文件读取(转)
  3. Object of type 'ndarray' is not JSON serializable
  4. 2019 Multi-University Training Contest 3 Find the answer (离散化+二分+树状数组)
  5. 实现memcpy()函数及过程总结
  6. ps:建立规则选区
  7. luogu3350 [ZJOI2016]旅行者
  8. Django中如何将javascript中的变量传给位于javascript内的{% url %}中的参数?
  9. win cmd执行Python脚本提示找不到模块问题
  10. Proto3语法翻译