1074 食物链

 
题目描述 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),输出假话的总数。

输入描述 Input Description

第一行是两个整数N和K,以一个空格分隔。   

以下K行每行是三个正整数D,X,Y,两数之间用一个空格隔开,其中 D 表示说法的种类。   

若D=1,则表示X和Y是同类。   

若D=2,则表示X吃Y。

输出描述 Output Description

只有一个整数,表示假话的数目。

样例输入 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

数据范围及提示 Data Size & Hint

输入文件

对7句话的分析 100 7

1 101 1  假话

2 1 2    真话

2 2 3    真话

2 3 3    假话

1 1 3    假话

2 3 1    真话

1 5 5    真话

题目分析:

这道题的思路与关押罪犯类似,使用的方法为带权并查集。

而对于输入的关系:

1.如果x或y>n,或x==y,pd=2【实际操作时我将pd-1了所以会有些不一样】(即同种动物自己吃自己,这些均为错误的)。

2.如果x和y之并没有直接或间接的关系,那么必然不会错误,

(fx表示x的祖先,fy表示y的祖先)

(1)pd=1 将fx的祖先与fy的祖先并在一起,并记录fy到fx的距离(对于距离应该进行mod3,因为在食物链中动物只有三种状态0,1,2且处理使1吃0,0吃2,2吃1)为y到fy距离减去x到fx的距离。

(2)pd=2 基本同上,不过由于是天敌,距离要加1。

3.如果x和y已经有关系。

(1) 若输入满足原有关系,则不做处理;

(2)若不满足,则该句为假。

  1. #include<cstdio>
  2. #define N 50005
  3. int f[N],d[N];//f[i]表示i的父亲,d[i]表示i到f[i]的距离。
  4. int read()
  5. {
  6. char c;
  7. while((c=getchar())<''||c>'');
  8. int re=c-'';
  9. while((c=getchar())>=''&&c<='') re=(re<<)+(re<<)+c-'';
  10. return re;
  11. }//读入优化
  12. int find(int a)
  13. {
  14. if(!f[a]) return a;
  15. int t=find(f[a]);
  16. d[a]+=d[f[a]];
  17. d[a]%=;
  18. return f[a]=t;//路径压缩是应该顺便将权也加上根节点
  19. }
  20. int main()
  21. {
  22. int n=read(),k=read(),ans=;
  23. while(k--)
  24. {
  25. int pd=read()-,x=read(),y=read();
  26. if(x>n||y>n||(pd==1&&x==y)) ans++;//讲解1
  27. else
  28. {
  29. int fx=find(x),fy=find(y);
  30. if(fx==fy)
  31. {
  32. if((d[x]-d[y]+)%!=pd) ans++;//讲解3
  33. }
  34. else f[fx]=fy,d[fx]=(d[y]-d[x]+pd+)%;//讲解2
  35. }
  36. }
  37. printf("%d",ans);
  38. return ;
  39. }

NOI 2001 食物链(eat)的更多相关文章

  1. [ NOI 2001 ] 食物链

    \(\\\) Description 有三类动物 \(A,B,C\),满足\(A\) 吃 \(B\),\(B\)吃 \(C\),\(C\) 吃 \(A\). 现有 \(N\) 个动物,以 \(1 - ...

  2. NOI 2001 食物链 /// 并查集 oj22035

    Description 动物王国中有三类动物A,B,C,这三类动物的食物链构成了有趣的环形.A吃B, B吃C,C吃A. 现有N个动物,以1~N编号.每个动物都是A,B,C中的一种,但是我们并不知道它到 ...

  3. NOI全国赛(2001)--食物链

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

  4. [NOI 2001]炮兵阵地

    Description 司令部的将军们打算在N*M的网格地图上部署他们的炮兵部队.一个N*M的地图由N行M列组成,地图的每一格可能是山地(用“H” 表示),也可能是平原(用“P”表示),如下图.在每一 ...

  5. [ NOI 2001 ] 方程的解数

    \(\\\) \(Description\) 已知一个 \(N\) 元高次方程: \[ k_1x_1^{p_1}+k_2x_2^{p_2}+...+k_nx_n^{p_n}=0 \] 要求所有的 \( ...

  6. Codevs 1074 食物链 2001年NOI全国竞赛

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

  7. CODEVS 1074 食物链 2001年NOI全国竞赛(洛谷 P2024)

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

  8. 1074 食物链 2001年NOI全国竞赛

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

  9. 食物链 2001年NOI全国竞赛

    时间限制: 3 s 空间限制: 64000 KB 题目等级 : 钻石 Diamond   题目描述 Description 动物王国中有三类动物 A,B,C,这三类动物的食物链构成了有趣的环形.A吃B ...

随机推荐

  1. Java-->Json解析网页数据

    --> 官方解析jar包: 链接:http://pan.baidu.com/s/1pKDnXKv 密码:694d --> 离线Json格式检测工具: 链接:http://pan.baidu ...

  2. 台球游戏的核心算法和AI(1)

    前言: 08年的时候, 写过一个台球游戏, 用的是java, 不过代码真的是用传说中的神器notepad写的(你信吗? 其实是用GVIM写的, ^_^), 很多类都在同一java文件中编写. 可见当时 ...

  3. ✡ leetcode 167. Two Sum II - Input array is sorted 求两数相加等于一个数的位置 --------- java

    Given an array of integers that is already sorted in ascending order, find two numbers such that the ...

  4. postfix启动脚本

    使用该脚本是一定要注意postfix安装路径 #!/bin/bash # # postfix Postfix Mail Transger Agent # # chkconfig: # descript ...

  5. iOS9适配中的各种问题

    1.http在ios9上不能在使用.需要进行配置. the resource could not be loaded because the app transport security policy ...

  6. HSDB

    select t from java.lang.Thread t $JAVA_HOME/bin/java -classpath $JAVA_HOME/lib/sa-jdi.jar sun.jvm.ho ...

  7. [zz] 混合高斯模型 Gaussian Mixture Model

    聚类(1)——混合高斯模型 Gaussian Mixture Model http://blog.csdn.net/jwh_bupt/article/details/7663885 聚类系列: 聚类( ...

  8. System.Data.SQLite

    SQLite介绍 在介绍System.Data.SQLite之前需要介绍一下SQLite,SQLite是一个类似于Access的单机版数据库管理系统,它将所有数据库的定义(包括定义.表.索引和数据本身 ...

  9. Notepad++快捷键&正则表达式替换字符串&插件

    Notepad++绝对是windows下进行程序编辑的神器之一,要更快速的使用以媲美VIM,必须灵活掌握它的快捷键,下面对notepad++默认的快捷键做个整理(其中有颜色的为常用招数): 1. 文件 ...

  10. Sybase alter 用法

    原文地址:http://lujinan858.iteye.com/blog/437019 --示例 1 为表添加列.Adaptive Server 为表中每个现有行分配一个 NULL --列值: al ...