Corporative Network (有n个节点,然后执行I u,v(把u的父节点设为v)和E u(询问u到根节点的距离))并查集
A very big corporation is developing its corporative network. In the beginning each of the N enterprises of the
corporation, numerated from 1 to N, organized its own computing and telecommunication center. Soon, for
amelioration of the services, the corporation started to collect some enterprises in clusters, each of them
served by a single computing and telecommunication center as follow. The corporation chose one of the
existing centers I (serving the cluster A) and one of the enterprises J in some cluster B (not necessarily the
center) and link them with telecommunication line. The length of the line between the enterprises I and J is |I
J|(mod 1000). In such a way the two old clusters are joined in a new cluster, served by the center of the old
cluster B. Unfortunately after each join the sum of the lengths of the lines linking an enterprise to its serving
center could be changed and the end users would like to know what is the new length. Write a program to
keep trace of the changes in the organization of the network that is able in each moment to answer the
questions of the users.
Input
Your program has to be ready to solve more than one test case. The first line of the input file will contains
only the number T of the test cases. Each test will start with the number N of enterprises (5≤N≤20000). Then
some number of lines (no more than 200000) will follow with one of the commands:
E I asking the length of the path from the enterprise I to its serving center in the moment;
I I J informing that the serving center I is linked to the enterprise J.
The test case finishes with a line containing the word O. The I commands are less than N.
Output
The output should contain as many lines as the number of E commands in all test cases with a single number
each the asked sum of length of lines connecting the corresponding enterprise with its serving center.
Sample Input
1
4
E 3
I 3 1
E 3
I 1 2
E 3
I 2 4
E 3
O
Sample Output
0
2
3
5
题意是: 有n个节点,然后执行I u,v(把u的父节点设为v)和E u(询问u到根节点的距离。
I : u v 将u的父节点变为v。
E:u 输出u到根节点的距离
这是一个带权的并查集。而对这个题而言,输入I后,某点的父节点是不断在变的,如果本来1的父节点是3,我输入“I 1 5”,那么1的父节点就变成5了,距离是4而不是2。所以输入I以后,我们只需要执行这些代码:
else if(ch=='I')
{
ll a,b;cin>>a>>b;
pr[a]=b; //更新父节点
dis[a]=abs(b-a)%; //更新距离
}
而输入“E”后,我们需要执行find(u),找出u的根节点的过程中,更新dis的值,找到根节点后,要把,pr【x】=f。更新好其根节点。
如果不明白的话,可以拿此样例操作一遍就理解了:
I 1 2
I 2 3
I 1 4
E 1
代码:
#include<iostream>
#include<cstdio>
#include<cmath>
#include<algorithm>
#include<cmath>
using namespace std;
const int maxn=;
typedef long long ll;
ll pr[maxn];
ll dis[maxn];
int find(ll x)
{
if(pr[x]!=x)
{
ll f=find(pr[x]);
dis[x]+=dis[pr[x]];
return pr[x]=f; //否则会出现dis重复加的情况,即每次询问都要加一遍,会越来越大。
}
else
return x;
}
int main()
{
ll t;
cin>>t;
while(t--)
{
ll n;
cin>>n;
for(int i=;i<maxn;i++)
{
pr[i]=i;dis[i]=;
}
char ch;
while(cin>>ch)
{
if(ch=='')
break;
else if(ch=='I')
{
ll a,b;cin>>a>>b;
pr[a]=b;dis[a]=abs(b-a)%;
}
else if(ch=='E')
{
ll a;
cin>>a;
find(a);
cout<<dis[a]<<endl;
}
}
}
return ;
}
Corporative Network (有n个节点,然后执行I u,v(把u的父节点设为v)和E u(询问u到根节点的距离))并查集的更多相关文章
- LA 3027 Corporative Network 并查集记录点到根的距离
Corporative Network Time Limit: 3000MS Memory Limit: Unknown 64bit IO Format: %lld & %llu [S ...
- UVALive 3027 Corporative Network 带权并查集
Corporative Network A very big corporation is developing its corporative networ ...
- UVALive 3027 Corporative Network (带权并查集)
题意: 有 n 个节点,初始时每个节点的父节点都不存在,你的任务是执行一次 I 操作 和 E 操作,含义如下: I u v : 把节点 u 的父节点设为 v ,距离为| u - v | ...
- openLDAP安装时无法操作根节点数据,提示的是This base cannot be created with PLA.
1.无法操作根节点数据,提示的是This base cannot be created with PLA. 解决办法 1)添加一个base.ldif文件,里面的dc和配置文件里的保持一致即可 dn: ...
- [LA] 3027 - Corporative Network [并查集]
A very big corporation is developing its corporative network. In the beginning each of the N enterpr ...
- 3027 - Corporative Network(并差集)
3027 - Corporative Network A very big corporation is developing its corporative network. In the begi ...
- Oracle 12.2.0.1 RAC for rhel 7.X 数据库安装(节点1执行root.sh失败)
说明: 最开始是用的rehat7.2安装12.2.0.1,后面安装GI节点一执行root.sh脚本失败,排查原因,最开始以为是操作系统的问题,换成rehat7.6,同样的出现问题,经过一番折腾,后面通 ...
- 并查集 + 路径压缩(经典) UVALive 3027 Corporative Network
Corporative Network Problem's Link Mean: 有n个结点,一开始所有结点都是相互独立的,有两种操作: I u v:把v设为u的父节点,edge(u,v)的距离为ab ...
- 【35.86%】【POJ 1962】Corporative Network
Time Limit: 3000MS Memory Limit: 30000K Total Submissions: 3943 Accepted: 1414 Description A very bi ...
随机推荐
- yolov3测试自己的数据
yolov3测试自己的数据 前言 上一篇我已经介绍了利用yolov3预训练权重文件(只包含卷积层)并训练 只需要进行如下编译: ./darknet detector train cfg/voc.dat ...
- 安卓Recycleview简单的网格布局-初学者的关键点
导包 def supportVersion = '28.0.0' 定义常量我的sdk版本为28 implementation "com.android.support:recyclervie ...
- DevOps - 与传统方式区别
章节 DevOps – 为什么 DevOps – 与传统方式区别 DevOps – 优势 DevOps – 不适用 DevOps – 生命周期 DevOps – 与敏捷方法区别 DevOps – 实施 ...
- C++编程学习(九)this指针&友元函数
mooc西工大魏英老师的课程通道关闭了,难受.现在边看工程代码边重温刷第一遍C++时候的知识点,顺序没有按照大纲的来,想到哪写到哪. this是干啥用的? 简介:在 C++ 中,每一个对象都能通过 t ...
- python 求两个数的最大公约数
给定两个整数a,b,求他们的最大公约数 def gcd(a,b): if a<b: a,b=b,a while(a%b != 0): c = a%b a=b b=c return b a,b = ...
- http请求的过程及潜在的性能优化点
web前端的看富于部署过程 开发者将开发的代码发布到远程的服务器(webserver/cdn),用户通过访问浏览器输入相应的网址,浏览器向远程服务器发送请求,动态的增量式的加载资源 web前端就是一个 ...
- java枚举类(转)
转自: http://blog.sina.com.cn/s/blog_697b968901013ih1.html 这里主要讲解的是Java的枚举类型 什么是枚举? 以我的理解答:枚举是我们自己定义的一 ...
- excel处理经纬度
=LEFT(A1,FIND("°",A1)-1)*1+MID(A1,FIND("°",A1)+1,2)/60+MID(A1,FIND("′" ...
- 每天一点点之 taro 框架 - 生命周期 & state
注意:从vue过来的小朋友要注意,taro直接赋值时不会更新组件的,同react一致更新数据必须调用setState方法,例如:this.setState({name:'张三'}) 1.render函 ...
- windows driver 获取文件属性
OBJECT_ATTRIBUTES oa; FILE_NETWORK_OPEN_INFORMATION fnoi; UNICODE_STRING strPath = RTL_CONSTANT_STRI ...