http://poj.org/problem?id=1182

/********************************************************
此道题目 前天看的时候一点头绪都没有,看了他人的解题报告后
也几乎看不懂,但是首先做了两道并查集的基础题目POJ1611,与
POJ2524,熟悉并查集的结构,又做了两道并查集的拓展题目
POJ2492与1703,,在充分了解并可以熟悉运用并查集后,此题
便可迎刃而解了,也通过此题发现了自学的诀窍“循序渐进”,
刚刚AC掉食物链问题,有些小激动,遂发此感慨,呵呵~~~
********************************************************/

View Code

1 #include<iostream>
2 usingnamespace std;
3
4 int N,K,relation,a,b,count;
5 int p[50010],r[50010];//p[]为父亲数组,
6 //r[]为x与p[x]的关系数组
7 //0代表同类,1代表x吃父亲p[x]
8 //1代表父亲p[x]吃x
9
10 /*******************************************************/
11 //初始化函数
12 void make(){
13 for(int i=1;i<=N;i++){
14 p[i]=i;
15 r[i]=0;
16 }
17 }
18 /******************************************************/
19 //查找根节点(祖宗)的函数,采用递推压缩路径
20 //使得每一个节点都指向祖宗
21 int find(int x){
22 int temp=p[x];//p[x]之后要被修改,先记下x的父亲值
23 if(x==p[x])return p[x];
24
25 p[x]=find(p[x]);//递推压缩路径,都指向了根节点
26 r[x]=(r[x]+r[temp])%3;//关系修改
27
28 return p[x];
29 }
30 /*******************************************************/
31 //合并
32 void unionSet(int x,int y,int px,int py){
33 p[px]=py;
34 r[px]=(r[y]-r[x]+3+relation-1)%3;
35 //关于三处的关系修改于判断,本人一开始采用枚举的方式,
36 //不过如果枚举的话,每次使用倒要if(3*3=)九次,很是
37 //啰嗦,之后总结出公式,不过可以用进行严格向量法证明
38 /*
39 if(relation==1){
40 //r[px]=(r[y]-r[x])%3;
41 if(r[x]==r[y]){r[px]=0;return;}
42 if(r[x]==0){r[px]=r[y];return;}
43 if(r[y]==0){r[px]=r[x];return;}
44 if(r[x]==1){r[px]=1;return;}
45 if(r[y]==1){r[px]=2;return;}
46 }
47 if(relation==2){
48 //r[px]=(r[y]-r[x]+1)%3;
49
50 if(r[x]==0&&r[y]==0){}
51 if(r[x]==0&&r[y]==1){}
52 if(r[x]==0&&r[y]==2){}
53 if(r[x]==0&&r[y]==)
54 */
55 }
56
57 /*******************************************************/
58 int main(){
59 cin>>N>>K;
60 int pa,pb;
61 count=0;
62 make();
63 while(K--){
64 scanf("\n%d%d%d",&relation,&a,&b);
65 pa=find(a);
66 pb=find(b);
67 //输入数据有矛盾可以直接判断
68 if(a>N||b>N||(relation==2&&a==b)){count++;continue;}
69 //pa!=pb,则说明,a与b还未建立关系,所以肯定不会
70 //产生矛盾
71 if(pa!=pb){unionSet(a,b,pa,pb);continue;}
72 //如果产生关系,但是根据已存在的r[a]与r[b]算出的
73 //a与b之间的关系与输入的relation不相符,则矛盾
74 if((r[a]-r[b]+3)%3!=(relation-1)){count++;continue;}
75 }
76 cout<<count<<endl;
77 }

转载于:https://www.cnblogs.com/liushang0419/archive/2011/04/26/2029841.html

POJ 1182 食物链,并查集的拓展相关推荐

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

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

  2. poj 1182 食物链 并查集

    转自一位大佬的最全题解 https://blog.csdn.net/c0de4fun/article/details/7318642 #include <cstdio> #include ...

  3. poj 1182 食物链 (并查集)

    http://poj.org/problem?id=1182 重点依旧是用rank记录相对于根节点的关系,并及时跟新rank的值. code: #include<cstdio> using ...

  4. P1892 [BOI2003]团伙 +食物链 POJ - 1182 (并查集+思维)

    思路①: 开数组enem[i]记录节点i的敌对节点,当再次输入i的敌对节点时就把他所在并查集的根节点和enem[i]并起来. #include<bits/stdc++.h> using n ...

  5. Noi2001食物链-并查集

    Noi2001食物链-并查集 1 #include<iostream> 2 #include<cstdio> 3 #include<cstdlib> 4 #incl ...

  6. A Bug‘s Life POJ 2492 加权并查集

    A Bug's Life POJ 2492 加权并查集 传送门:http://poj.org/problem?id=2492 Description Background Professor Hopp ...

  7. POJ 1182 食物链 (并查集解法)(详细注释)

    食物链 Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 78510 Accepted: 23396 Description 动物王 ...

  8. POJ 1182 食物链(并查集+偏移向量)题解

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

  9. 拆点并查集(poj 1182: 食物链)

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

最新文章

  1. 人脸识别安全吗?调查称六成受访者认为技术有被滥用趋势
  2. 转载:Hyper-V管理器和SCVMM 2008 R2区别
  3. Mina框架项目运用
  4. java书籍_学习Java最好的10本书,从入门到精通
  5. 由于 Web 服务器上的“ISAPI 和 CGI 限制”列表设置
  6. 从代码到 Docker、Kubernetes、Istio、Knative……,或许是时候重新思考从代码到云的编程了...
  7. 更司马懿学管理计算机,跟司马懿学管理(一)无悔的选择是好选择
  8. 小米第一款智能手表来了 或支持安装手机App
  9. java远程关机_通过jsch实现对linux服务器的shell客户端远程控制关机完整示例代码分享...
  10. 手机登入注册为什么出现这个错误?
  11. Hello!SCDN
  12. 二进制与十六进制的转换
  13. js:nodejs搭建http服务器为页面添加mysql中的数据分页
  14. react 在JXL中嵌入JS表达式
  15. 教育类型网站用户体验分析——以UMU学习平台、学生安全教育平台、师路南通为例...
  16. 继承 多态 抽象类 接口
  17. 华为 Mate 50 系列已经在供应方面取得重大突破,你对此期待吗?
  18. 公司价值评估-自由现金流法
  19. 需求定律公式和需求弹性推导——《可…
  20. 2021年全球超导体收入大约735.7百万美元,预计2028年达到823.7百万美元

热门文章

  1. 效率极低人群的七大习惯你占了几项?
  2. [转]多线程更新Processbar
  3. perl(Class::MethodMaker) is needed by MySQL-ndb-tools-5.1.21-0.glibc23.i386
  4. Markdown 工程师也不简单:如何写一个高逼格 README
  5. PHP|异常的使用,异常子类化的最佳实践
  6. Kuskal/Prim POJ 1789 Truck History
  7. Mirantis Certification summary
  8. install scrapy with pip and easy_install
  9. python之pydev安装
  10. XenDesktop 5.6 PVS6.1测试中出现的一例错误:Management Interface:Remote request failed