题目链接

经过宝哥的讲解,终于对这种问题有了进一步的理解。根据flag[x]和flag[y]求flag[tx]是最关键的了。

0吃1,1吃2,2吃0.

假设flag[tx] = X;

那么X + flag[x]  = flag[y] + 2 (当x吃y的时候)

  1. #include <cstring>
  2. #include <cstdio>
  3. #include <string>
  4. #include <iostream>
  5. #include <algorithm>
  6. #include <vector>
  7. using namespace std;
  8. int o[];
  9. int flag[];
  10. int ans;
  11. int find(int x)
  12. {
  13. if (x == o[x]) return x;
  14. int t = find(o[x]);
  15. flag[x] = (flag[o[x]] + flag[x]) % ;
  16. return o[x] = t;
  17. }
  18. void judge1(int x,int y)
  19. {
  20. int tx,ty;
  21. tx = find(x);
  22. ty = find(y);
  23. if(tx != ty)
  24. {
  25. o[tx] = ty;
  26. flag[tx] = (flag[y] - flag[x] + )%;
  27. }
  28. else if(tx == ty)
  29. {
  30. if(flag[x] != flag[y])
  31. ans ++;
  32. }
  33. }
  34. void judge2(int x,int y)//x吃y
  35. {
  36. int tx,ty;
  37. tx = find(x);
  38. ty = find(y);
  39. if(tx != ty)
  40. {
  41. o[tx] = ty;
  42. flag[tx] = (flag[y] - flag[x] + )%;
  43. }
  44. else if(tx == ty)
  45. {
  46. if((flag[x]-flag[y]+)% != )
  47. ans ++;
  48. }
  49. }
  50. int main()
  51. {
  52. int n,m,num,sv,ev,i;
  53. scanf("%d%d",&n,&m);
  54. ans = ;
  55. for(i = ; i <= n; i ++)
  56. {
  57. o[i] = i;
  58. flag[i] = ;
  59. }
  60. for(i = ; i < m; i ++)
  61. {
  62. scanf("%d%d%d",&num,&sv,&ev);
  63. if(sv > n||ev > n)
  64. {
  65. ans ++;
  66. continue;
  67. }
  68. if(num == )
  69. {
  70. judge1(sv,ev);
  71. }
  72. else
  73. {
  74. judge2(sv,ev);
  75. }
  76. }
  77. printf("%d\n",ans);
  78. return ;
  79. }

POJ 1182 食物链(并查集)的更多相关文章

  1. POJ 1182 食物链 [并查集 带权并查集 开拓思路]

    传送门 P - 食物链 Time Limit:1000MS     Memory Limit:10000KB     64bit IO Format:%I64d & %I64u Submit  ...

  2. poj 1182 食物链 并查集 题解《挑战程序设计竞赛》

    地址 http://poj.org/problem?id=1182 题解 可以考虑使用并查集解决 但是并不是简单的记录是否同一组的这般使用 每个动物都有三个并查集 自己 天敌 捕食 并查集 那么在获得 ...

  3. POJ 1182 食物链(并查集的使用)

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

  4. poj 1182 食物链 并查集的又一个用法

    食物链   Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 41584   Accepted: 12090 Descripti ...

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

    食物链Time Limit: 1000MS Memory Limit: 10000KTotal Submissions: 85474 Accepted: 25549Description动物王国中有三 ...

  6. POJ - 1182 食物链 并查集经典

    思路:设r(x)表示节点x与根结点的关系,px表示x的根结点.记录每个节点与其父节点的关系,就能很方便知道每个节点以及和它的父节点的关系. struct node{ int par; //父亲节点 i ...

  7. poj——1182食物链 并查集(提升版)

    因为是中文题,题意就不说了,直接说思路: 我们不知道给的说法中的动物属于A B C哪一类,所以我们可以用不同区间的数字表示这几类动物,这并不影响结果,我们可以用并查集把属于一类的动物放在一块,举个例子 ...

  8. POJ 1182 食物链 (并查集)

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

  9. poj 1182 (关系并查集) 食物链

    题目传送门:http://poj.org/problem?id=1182 这是一道关系型并查集的题,对于每个动物来说,只有三种情况:同类,吃与被吃: 所以可以用0,1,2三个数字代表三种情况,在使用并 ...

随机推荐

  1. ActionProxy相关实现类

    package com.opensymphony.xwork2; import com.opensymphony.xwork2.config.Configuration; import com.ope ...

  2. nodemailer发送邮件遇到的一些问题

    使用nodemailer发送邮件一直困惑了我好几天,百度谷歌都没有找到的几个问题,方便大家排查. 我使用的是0.7.1版本,其他的版本好像报错,就没用. 错误信息:Mail from command ...

  3. POJ——3984迷宫问题(BFS+回溯)

    迷宫问题 Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 14568   Accepted: 8711 Description ...

  4. [UOJ#220][BZOJ4651][Noi2016]网格

    [UOJ#220][BZOJ4651][Noi2016]网格 试题描述 跳蚤国王和蛐蛐国王在玩一个游戏. 他们在一个 n 行 m 列的网格上排兵布阵.其中的 c 个格子中 (0≤c≤nm),每个格子有 ...

  5. 填报志愿(codevs 2930)

    题目描述 Description 高考已经结束,而志愿填报正在进行中- 吴校长的学校里有n位同学,每位同学有ki个愿意去的大学.而在吴老师的省份中,有m所大学有招生名额.根据往年的经验,对于每所大学( ...

  6. ElasticSearch索引自定义类型

    ES可以自动检测字段并设置映射类型.如果设置的索引类型不是我们所需要的,我们可以自行定义. Rest API设置自定义索引 首先通过ES自动映射一个IP地址的字段的类型: <pre name=& ...

  7. CodeForces 438D 线段树 剪枝

    D. The Child and Sequence time limit per test 4 seconds memory limit per test 256 megabytes input st ...

  8. C++ 使用成员初始化列表的一个小坑

    注意在成员列表中初始化的顺序并不是列表顺序 而是: 在类中声明的顺序! EventLoop::EventLoop() :looping(false), quit(false),_tid(curThre ...

  9. MySQL主从架构配置

    MySQL主从架构配置有两台MySQL数据库服务器master和slave,master为主服务器,slave为从服务器,初始状态时,master和slave中的数据信息相同,当master中的数据发 ...

  10. IOS --关于粘贴板 ,剪切板 ,UILabel的复制

    在iOS中下面三个控件,自身就有复制-粘贴的功能: 1.UITextView 2.UITextField 3.UIWebView UIKit framework提供了几个类和协议方便我们在自己的应用程 ...