1、WA代码

思路:预先分好3类,对每一行数据进行分类和真话假话判断

WA原因:前面某些行的数据 需要依赖 后面某些行给的数据 才能进行分类

初步改正思路( 对于前面给的无法直接分类的数据进行记录,等遇到合适的数据再拿出来进行分类  数据给完还无法分类的列为假话 )

未改正代码

  1. # include<iostream>
  2. # include<string>
  3. # include<string.h>
  4. # include<queue>
  5. # include<stdio.h>
  6. # include<math.h>
  7. #include <algorithm>
  8. using namespace std;
  9. #define MAX 50005
  10. //int rank[MAX];
  11. int pre[MAX];
  12. int tot,n;
  13. int flag[];
  14. struct Node
  15. {
  16. int a,b,c;
  17. }node;
  18. queue<Node> q;
  19. void Init()
  20. {
  21. for(int i=;i<=n+;i++) //pre[n+1]表示A类动物 pre[n+2]表示B类动物 pre[n+3]表示C类动物
  22. {
  23. pre[i] = i;
  24. //rank[i] = 1;
  25. }
  26. tot = ;
  27. flag[] = ; //表示尚无A类动物
  28. flag[] = ;
  29. flag[] = ;
  30. }
  31. int find(int x)
  32. {
  33. int p=x,t;
  34. while(pre[p]!=p) //x结点迭代往上寻找到祖宗结点 存储在p
  35. {
  36. p = pre[p];
  37. }
  38.  
  39. while(x != p) // 把x结点到其祖宗结点中 经过的所有结点 都直接连到 祖宗结点
  40. {
  41. t = pre[x];
  42. pre[x] = p;
  43. x = t;
  44. }
  45. return x;
  46. }
  47. void Unite(int x,int y)
  48. {
  49. x = find(x);
  50. y = find(y);
  51. if(x==y)
  52. return;
  53. pre[x] = y;
  54. /*
  55. if(rank[x]<rank[y]) //高度小的为子树
  56. {
  57. pre[x] = y;
  58. }
  59. else
  60. {
  61. pre[y] = x;
  62. if(rank[x] == rank[y])
  63. rank[x]++;
  64. }
  65. */
  66. }
  67. void judge()
  68. {
  69. int ct=;
  70. while(!q.empty())
  71. {
  72.  
  73. node = q.front();
  74. int a,b,c;
  75. a = node.a;
  76. b = node.b;
  77. c = node.c;
  78. int fb,fc,f=;
  79. fb = find(b);
  80. fc = find(c);
  81.  
  82. //printf("%d %d %d %d %d %d\n",f,fb,fc,flag[0],flag[1],flag[2]);
  83. //printf("%d\n--------------------------------------\n",tot);
  84. if(ct>=) break;
  85.  
  86. if(b>n || c>n ||b<= || c<=) //假话条件2判断
  87. {
  88. tot++;
  89. q.pop();
  90. continue;
  91. }
  92. if(a== && b==c) //假话条件3 =判断
  93. {
  94. tot++;
  95. q.pop();
  96. continue;
  97. }
  98. if(a==)
  99. {
  100. if( fb==b && fc==c ) //b,c编号动物都是第一次出现
  101. {
  102. for(int i=;i<;i++) //3个类别未满
  103. {
  104. if(flag[i]==)
  105. {
  106. //Unite(b,n+i+1);
  107. //Unite(c,n+i+1);
  108. pre[b] = n+i+;
  109. pre[c] = n+i+;
  110. flag[i] = ;
  111. f = ;
  112. q.pop();
  113. break;
  114. }
  115. }
  116. if(f==) continue;
  117. //类别已满
  118. q.push(node);
  119. ct++;
  120. }
  121. else if(fb==b && fc!=c) //b编号动物第一次出现,c编号动物已有分类
  122. {
  123. pre[b] = fc;
  124. flag[fc-n-] = ;
  125. q.pop();
  126. continue;
  127. }
  128. else if(fb!=b && fc==c) //c编号动物第一次出现,b编号动物已有分类
  129. {
  130. pre[c] = fb;
  131. flag[fb-n-] = ;
  132. q.pop();
  133. continue;
  134. }
  135. else //b,c编号动物都已分类
  136. {
  137. if(fb!=fc) //出现矛盾
  138. {
  139. tot++;
  140. q.pop();
  141. continue;
  142. }
  143. }
  144.  
  145. }
  146. else
  147. {
  148. //printf("%d %d",b,c);
  149. if( fb==b && fc==c ) //b,c编号动物都是第一次出现
  150. {
  151. //printf("sddsgfdg");
  152. for(int i=;i<;i++) //3个类别未满
  153. {
  154. int j = (i+)%;
  155. if(flag[i]== && flag[j]==)
  156. {
  157. //Unite(b,n+i+1);
  158. //Unite(c,n+j+1);
  159. pre[b] = n+i+;
  160. pre[c] = n+j+;
  161. flag[i] = ;
  162. flag[j] = ;
  163. f = ;
  164. q.pop();
  165. break;
  166. }
  167. }
  168.  
  169. if(f==) continue;
  170. //类别已满
  171. q.push(node);
  172. ct++;
  173. }
  174. else if(fb==b && fc!=c) //b编号动物第一次出现,c编号动物已有分类
  175. {
  176. if(fc==n+)
  177. {
  178. pre[b] = n+; //Unite(b,n+3);
  179. flag[] = ;
  180. q.pop();
  181. continue;
  182. }
  183. else if(fc==n+)
  184. {
  185. pre[b] = n+; //Unite(b,n+1);
  186. flag[] = ;
  187. q.pop();
  188. continue;
  189. }
  190. else if(fc==n+)
  191. {
  192. pre[b] = n+; //Unite(b,n+2);
  193. flag[] = ;
  194. q.pop();
  195. continue;
  196. }
  197. }
  198. else if(fb!=b && fc==c) //c编号动物第一次出现,b编号动物已有分类
  199. {
  200. if(fb==n+)
  201. {
  202. pre[c] = n+; //Unite(c,n+2);
  203. flag[] = ;
  204. q.pop();
  205. continue;
  206. }
  207. else if(fb==n+)
  208. {
  209. pre[c] = n+; //Unite(c,n+3);
  210. flag[] = ;
  211. q.pop();
  212. continue;
  213. }
  214. else if(fb==n+)
  215. {
  216. pre[c] = n+; //Unite(c,n+1);
  217. flag[] = ;
  218. q.pop();
  219. continue;
  220. }
  221. }
  222. else //b,c编号动物都已分类
  223. {
  224. if(fb-fc==- )
  225. {
  226. q.pop();
  227. continue;
  228. }
  229. else if(fb-fc== )
  230. {
  231. q.pop();
  232. continue;
  233. }
  234. tot++;
  235. q.pop();
  236. continue;
  237. }
  238. }
  239. }
  240. while(!q.empty())
  241. {
  242. tot++;
  243. q.pop();
  244. }
  245. }
  246.  
  247. int main()
  248. {
  249. int k;
  250. scanf("%d %d",&n,&k);
  251. Init();
  252. int i,j;
  253. for(i=;i<k;i++)
  254. {
  255. int a,b,c;
  256. scanf("%d %d %d",&a,&b,&c);
  257. node.a = a;
  258. node.b = b;
  259. node.c = c;
  260. q.push(node);
  261. //printf("%d\n---------------------------\n",tot);
  262. }
  263. judge();
  264. printf("%d",tot);
  265. return ;
  266. }

2、

正确思路:不按照捕食关系进行细致分类,而是按照动物间存在关系就分为一类,用relation表示结点与父节点的关系

NYOJ 食物链(WA)的更多相关文章

  1. poj 1182 食物链 &amp;&amp; nyoj 207(种类并查集)

    食物链 Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 52414   Accepted: 15346 Description ...

  2. POJ 1182 食物链(带权并查集)

    传送门 食物链  Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 65579   Accepted: 19336 Descri ...

  3. bzoj4562: [Haoi2016]食物链--记忆化搜索

    这道题其实比较水,半个小时AC= =对于我这样的渣渣来说真是极大的鼓舞 题目大意:给出一个有向图,求入度为0的点到出度为0的点一共有多少条路 从入读为零的点进行记忆化搜索,搜到出度为零的点返回1 所有 ...

  4. 食物链 poj 1182

    C - 食物链 Time Limit:1000MS     Memory Limit:10000KB     64bit IO Format:%I64d & %I64u Submit Stat ...

  5. POJ 1182 食物链(种类并查集)

    食物链 Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 63592   Accepted: 18670 Description ...

  6. NYOJ 45 棋盘覆盖 模拟+高精度

    题意就不说了,中文题... 小白上讲了棋盘覆盖,于是我就挖了这题来做. 棋盘覆盖的推导不是很难理解,就是分治的思想,具体可以去谷歌下. 公式就是f(k) = f(k - 1) * 4 + 1,再化解下 ...

  7. POJ 1182 食物链 -- 解题报告

    食物链 Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 70529   Accepted: 20875 Description ...

  8. PAT-L3-球队“食物链”-dfs-状压-set

    题目分析: 1. 一场双循环赛制的篮球赛,注意双循环,双循环! 2. 共有n只球队,两两之间有胜有负有平局: 3. 输入: 举例: 第一行:W:代表球队1打赢过这只队伍 L:代表球队2没打赢过这只队伍 ...

  9. 食物链-HZUN寒假集训

    食物链 总时间限制: 1000ms 内存限制: 65536kB 描述 动物王国中有三类动物A,B,C,这三类动物的食物链构成了有趣的环形.A吃B, B吃C,C吃A. 现有N个动物,以1-N编号.每个动 ...

随机推荐

  1. SpringMVC -- @RequestMapping -- 随记

    @RequestMapping RequestMapping是一个用来处理请求地址映射的注解,可用于类或方法上.用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径. RequestMappi ...

  2. day_6.17 gevent版服务器

    用协程做并发服务器   gevent版本: monkey.patch_all() 修改了自己的代码 只能用mokey里面的代码 #!--*coding=utf-8*-- #2018-6-17 12:0 ...

  3. include_once与require_once的区别

    ①作用及用法  可以减少代码的重复 include(_once)("文件的路径")与require(_once)("文件的路径") ②理解 说白了,就是用包含进 ...

  4. 初窥scrapy爬虫

    2017-10-30  21:49:55 前言: 初步使用scrapy爬虫框架,爬取各个网站信息 系统环境: 64位win10系统,装有64位python3.6,IDE为pycharm,使用cmd命令 ...

  5. 爬虫----爬虫请求库selenium

    一 介绍 selenium最初是一个自动化测试工具,而爬虫中使用它主要是为了解决requests无法直接执行JavaScript代码的问题 selenium本质是通过驱动浏览器,完全模拟浏览器的操作, ...

  6. GIT----玩转Git

    版本控制 说到版本控制,脑海里总会浮现大学毕业是写毕业论文的场景,你电脑上的毕业论文一定出现过这番景象! 1 2 3 4 5 6 7 8 9 10 11 毕业论文_初稿.doc 毕业论文_修改1.do ...

  7. 掌握业界最新工程实践 | 了解AIOps下一代微服务等最新趋势

    近年来,IT应用越来越复杂,一旦出现故障,诊断越来越困难,使用传统技术来管理机器数据的组织会让其运维团队不堪重负.幸好随着大数据.机器学习和AI技术的飞速发展,智能化运维给这一现状带来了改变. 那么就 ...

  8. ROS中.launch文件的remap标签详解

    https://www.cnblogs.com/LiuQiang921202/p/7679943.html

  9. CMake error with move_base_msgs问题解决

    错误 CMake Error at /opt/ros/groovy/share/catkin/cmake/catkinConfig.cmake: (find_package): Could not f ...

  10. python中的os

    import sys, os print(__file__) # 绝对路径,实际是文件名 /Users/majianyu/Desktop/test/bin/bin.py print(os.path.a ...