POJ1962:Corporative Network【带权并查集】
<题目链接>
题目大意:
n个节点,若干次询问,I x y表示从x连一条边到y,权值为|x-y|%1000;E x表示询问x到x所指向的终点的距离。
解题分析:
与普通的带权并查集类似,但是要注意的是,在进行查询操作时,也要调用一下find函数,因为以前的uion操作可能将某些值改变了,所以find()操作是将这些节点全部更新一遍,得到它们的真实值。
#include <cstdio>
#include <cmath> const int maxn=+; int father[maxn],dis[maxn];
int n; int find(int x){
if(father[x]==x)
return x;
int temp=father[x];
father[x]=find(father[x]);
dis[x]=dis[x]+dis[temp]; //x到根节点的距离=x到父亲的距离+父亲到根节点的距离。不能交换这句和上一句的顺序,否则dis[x]就表现不了到新根的距离了
return father[x];
} void Uion(int a,int b){
int ra=find(a);
int rb=find(b);
if(ra!=rb){
father[ra]=rb;
dis[ra]=(abs(a-b)%-dis[a]+dis[b]); //根据矢量,得出ra到rb的距离
}
} int main(){
int t;scanf("%d",&t);
while(t--){
scanf("%d",&n);
for(int i=;i<=n;i++){
father[i]=i;
dis[i]=;
}
getchar();
char ch;
while(scanf("%c",&ch)){
if(ch=='O')break;
if(ch=='I'){
int a,b;
scanf("%d %d",&a,&b);
Uion(a,b);
getchar();
}
else{
int a;
scanf("%d",&a);
find(a); //注意这里,查询的时候也要压缩一下,因为uion操作会更新dis数据
printf("%d\n",dis[a]);
getchar();
}
}
}
return ;
}
2018-08-19
POJ1962:Corporative Network【带权并查集】的更多相关文章
- UVALive 3027	  Corporative Network 带权并查集
		
Corporative Network A very big corporation is developing its corporative networ ...
 - UVA 3027 Corporative Network 带权并查集、
		
题意:一个企业要去收购一些公司把,使的每个企业之间互联,刚开始每个公司互相独立 给出n个公司,两种操作 E I:询问I到I它连接点最后一个公司的距离 I I J:将I公司指向J公司,也就是J公司是I公 ...
 - POJ1962Corporative Network[带权并查集]
		
Corporative Network Time Limit: 3000MS Memory Limit: 30000K Total Submissions: 3945 Accepted: 14 ...
 - 【poj 1962】Corporative Network(图论--带权并查集 模版题)
		
P.S.我不想看英文原题的,但是看网上题解的题意看得我 炒鸡辛苦&一脸懵 +_+,打这模版题的代码也纠结至极了......不得已只能自己翻译了QwQ . 题意:有一个公司有N个企业,分成几个网 ...
 - 【bzoj 1202】[HNOI2005] 狡猾的商人(图论--带权并查集+前缀和)
		
题意:一个账本记录了N个月以来的收入情况,现在有一个侦探员不同时间偷看到M段时间内的总收入,问这个账本是否为假账. 解法:带权并查集+前缀和. 判断账本真假是通过之前可算到的答案与当前读入的值是否 ...
 - 【poj 1988】Cube Stacking(图论--带权并查集)
		
题意:有N个方块,M个操作{"C x":查询方块x上的方块数:"M x y":移动方块x所在的整个方块堆到方块y所在的整个方块堆之上}.输出相应的答案. 解法: ...
 - 并查集——poj2236(带权并查集)
		
题目:Wireless Network 题意:给定n台已损坏计算机的位置和计算机最远通信距离d,然后分别根据命令执行以下两种操作: "O p" (1 <= p <= N ...
 - 带权并查集:HDU3172-Virtual Friends
		
Virtual Friends Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Tot ...
 - HDU_3172_带权并查集
		
Virtual Friends Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)T ...
 
随机推荐
- Android学习笔记——Content Provider(一)
			
Content Provider是Android系统四大组件之一: 官方的定义是:A Content Provider manages access to a central repository o ...
 - js_原生js实现上拉加载更多的功能。
			
1.人生啊,是我莽撞了啊.这是我公司一个喜欢读书的女孩子的个性签名,喜欢哪些句子,不悲伤,却切切实实的令人喜好. 2.写程序是一件很直接明了的事情,明白了就是明白了,不懂就是不懂,不懂装懂的会让你走很 ...
 - Django学习手册 - 自定义simple_tag  /  filter
			
相关: Django的模板引擎提供一般性的功能函数,通过前端可以实现多数的代码逻辑功能,但它仅支持大多数常见情况下的函数功能,例如if判断,ifequal对比返回值等,复杂一些的函数功能并不支持,例如 ...
 - avloadingindicatorview 使用解析
			
官方文档:https://github.com/81813780/AVLoadingIndicatorView 中文文档:https://www.helplib.com/GitHub/article_ ...
 - 如何用nodejs创建一个webservice
			
Posted on March 25th, 2012 under Express.js, Node.jsTags: Express.js, git, GitHub, node.js Looking f ...
 - springboot系列九,springboot整合邮件服务、整合定时任务调度
			
一.整合邮件服务 如果要进行邮件的整合处理,那么你一定需要有一个邮件服务器,实际上 java 本身提供有一套 JavaMail 组件以实现邮件服务器的搭建,但是这个搭建的服务器意义不大,因为你现在搭建 ...
 - (记录合并)union和union all的区别
			
SQL UNION 操作符 UNION 操作符用于合并两个或多个 SELECT 语句的结果集. 请注意,UNION内部的SELECT语句必须拥有相同数量的列.列也必须拥有相似的数据类型.同时,每条SE ...
 - spring mvc 校验@NULL
			
一需要的包 1 validation-api-1.0.0.GA.jar:JDK的接口: 2 hibernate-validator-4.2.0.Final.jar 是对上述接口的实现: 二 若在pom ...
 - Python-HTML CSS题目
			
一.简答1.手写html模板,并解释模板每个标签的作用 <!doctype html> 文件类型html <html>页面根 <head>后勤内容 <meta ...
 - JUnit单元测试--IntelliJ IDEA
			
单元测试的基本使用 一.环境配置 使用idea IDE 进行单元测试,首先需要安装JUnit 插件. 1.安装JUnit插件步骤 File-->settings-->Plguins--&g ...