POJ 1182 食物链,并查集的拓展
http://poj.org/problem?id=1182
/********************************************************
此道题目 前天看的时候一点头绪都没有,看了他人的解题报告后
也几乎看不懂,但是首先做了两道并查集的基础题目POJ1611,与
POJ2524,熟悉并查集的结构,又做了两道并查集的拓展题目
POJ2492与1703,,在充分了解并可以熟悉运用并查集后,此题
便可迎刃而解了,也通过此题发现了自学的诀窍“循序渐进”,
刚刚AC掉食物链问题,有些小激动,遂发此感慨,呵呵~~~
********************************************************/
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 食物链,并查集的拓展相关推荐
- POJ 1182 食物链 [并查集 带权并查集 开拓思路]
传送门 P - 食物链 Time Limit:1000MS Memory Limit:10000KB 64bit IO Format:%I64d & %I64u Submit ...
- poj 1182 食物链 并查集
转自一位大佬的最全题解 https://blog.csdn.net/c0de4fun/article/details/7318642 #include <cstdio> #include ...
- poj 1182 食物链 (并查集)
http://poj.org/problem?id=1182 重点依旧是用rank记录相对于根节点的关系,并及时跟新rank的值. code: #include<cstdio> using ...
- P1892 [BOI2003]团伙 +食物链 POJ - 1182 (并查集+思维)
思路①: 开数组enem[i]记录节点i的敌对节点,当再次输入i的敌对节点时就把他所在并查集的根节点和enem[i]并起来. #include<bits/stdc++.h> using n ...
- Noi2001食物链-并查集
Noi2001食物链-并查集 1 #include<iostream> 2 #include<cstdio> 3 #include<cstdlib> 4 #incl ...
- A Bug‘s Life POJ 2492 加权并查集
A Bug's Life POJ 2492 加权并查集 传送门:http://poj.org/problem?id=2492 Description Background Professor Hopp ...
- POJ 1182 食物链 (并查集解法)(详细注释)
食物链 Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 78510 Accepted: 23396 Description 动物王 ...
- POJ 1182 食物链(并查集+偏移向量)题解
食物链 Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 82346 Accepted: 24616 Description ...
- 拆点并查集(poj 1182: 食物链)
食物链 Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 76605 Accepted: 22779 Description ...
最新文章
- 人脸识别安全吗?调查称六成受访者认为技术有被滥用趋势
- 转载:Hyper-V管理器和SCVMM 2008 R2区别
- Mina框架项目运用
- java书籍_学习Java最好的10本书,从入门到精通
- 由于 Web 服务器上的“ISAPI 和 CGI 限制”列表设置
- 从代码到 Docker、Kubernetes、Istio、Knative……,或许是时候重新思考从代码到云的编程了...
- 更司马懿学管理计算机,跟司马懿学管理(一)无悔的选择是好选择
- 小米第一款智能手表来了 或支持安装手机App
- java远程关机_通过jsch实现对linux服务器的shell客户端远程控制关机完整示例代码分享...
- 手机登入注册为什么出现这个错误?
- Hello!SCDN
- 二进制与十六进制的转换
- js:nodejs搭建http服务器为页面添加mysql中的数据分页
- react 在JXL中嵌入JS表达式
- 教育类型网站用户体验分析——以UMU学习平台、学生安全教育平台、师路南通为例...
- 继承 多态 抽象类 接口
- 华为 Mate 50 系列已经在供应方面取得重大突破,你对此期待吗?
- 公司价值评估-自由现金流法
- 需求定律公式和需求弹性推导——《可…
- 2021年全球超导体收入大约735.7百万美元,预计2028年达到823.7百万美元
热门文章
- 效率极低人群的七大习惯你占了几项?
- [转]多线程更新Processbar
- perl(Class::MethodMaker) is needed by MySQL-ndb-tools-5.1.21-0.glibc23.i386
- Markdown 工程师也不简单:如何写一个高逼格 README
- PHP|异常的使用,异常子类化的最佳实践
- Kuskal/Prim POJ 1789 Truck History
- Mirantis Certification summary
- install scrapy with pip and easy_install
- python之pydev安装
- XenDesktop 5.6 PVS6.1测试中出现的一例错误:Management Interface:Remote request failed