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 ...
随机推荐
- 第14月第17天 automaticallyAdjustsScrollViewInsets contentInsetAdjustmentBehavior
1. automaticallyAdjustsScrollViewInsets self.edgesForExtendedLayout = UIRectEdgeNone; if ([self resp ...
- WPF GridView的列宽度设置为按比例分配
<Grid> <Grid> <Grid.ColumnDefinitions> <ColumnDefinition Width="3*" / ...
- Broadcast的类型
两种发送方法 1.无序广播 对于多个接收者来说是完全异步的,通常每个接收者都无需等待即可以接收到广播,接收者相互之间不会有影响.对于这种广播,接收者无法终止广播,即无法阻止其他接收者的 接收动作. 消 ...
- MYSQL和oracle 大小写问题
MySQL的大小写问题 不是一个很大的问题,但是如果不了解的话,却会使用户产生迷惑 :如下面 Sql代码insert into t values('A'); insert into t values( ...
- 对numpy中shape的理解
from:http://blog.csdn.net/by_study/article/details/67633593 环境:Windows, Python3.5 一维情况: >>> ...
- 泰克TDS1000B示波器使用说明
1.前言 本文主要根据泰克官方网站TDS1000B/TDS2000B使用教程视频进行整理. 2.认识你的示波器 TDS1000B带宽从40MHZ到200MHZ,采样率高达2Gbps
- H3C SNMP OID
有两种mib-style [1]老些的设备 cpu 使用率OID: .1.3.6.1.4.1.25506.2.6.1.1.1.1.6.slot 内存使用率OID: .1.3.6.1.4.1.2550 ...
- 使用Jyhon脚本和PMI模块监控WAS性能数据
使用Jyhon脚本和PMI模块监控WAS性能数据的优点有: 1.可以使用非交互的方式远程获取数据 2.不需要图形化模块支持 3.对各种was版本的兼容性较高 4.使用方便,官方自带 缺点也有很多: 1 ...
- centos 6.5环境下分布式文件系统MogileFS工作原理及分布式部署实现过程
MogileFS是一套高效的文件自动备份组件,由Six Apart开发,广泛应用在包括LiveJournal等web2.0站点上 MogileFS由3个部分组成: 第1个部分:是server端, ...
- Android数据存储:Shared Preferences
Android数据存储之SharedPreferences 在Android系统中提供了多种存储技术.通过这些存储技术可以将数据存储在各种存储介质上, Android 为数据存储提供了如下几种方式:1 ...