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到根节点的距离))并查集的更多相关文章

  1. LA 3027 Corporative Network 并查集记录点到根的距离

    Corporative Network Time Limit: 3000MS   Memory Limit: Unknown   64bit IO Format: %lld & %llu [S ...

  2. UVALive 3027 Corporative Network 带权并查集

                         Corporative Network A very big corporation is developing its corporative networ ...

  3. UVALive 3027 Corporative Network (带权并查集)

    题意: 有 n 个节点,初始时每个节点的父节点都不存在,你的任务是执行一次 I 操作 和 E 操作,含义如下: I  u  v   :  把节点 u  的父节点设为 v  ,距离为| u - v | ...

  4. openLDAP安装时无法操作根节点数据,提示的是This base cannot be created with PLA.

    1.无法操作根节点数据,提示的是This base cannot be created with PLA. 解决办法 1)添加一个base.ldif文件,里面的dc和配置文件里的保持一致即可 dn: ...

  5. [LA] 3027 - Corporative Network [并查集]

    A very big corporation is developing its corporative network. In the beginning each of the N enterpr ...

  6. 3027 - Corporative Network(并差集)

    3027 - Corporative Network A very big corporation is developing its corporative network. In the begi ...

  7. Oracle 12.2.0.1 RAC for rhel 7.X 数据库安装(节点1执行root.sh失败)

    说明: 最开始是用的rehat7.2安装12.2.0.1,后面安装GI节点一执行root.sh脚本失败,排查原因,最开始以为是操作系统的问题,换成rehat7.6,同样的出现问题,经过一番折腾,后面通 ...

  8. 并查集 + 路径压缩(经典) UVALive 3027 Corporative Network

    Corporative Network Problem's Link Mean: 有n个结点,一开始所有结点都是相互独立的,有两种操作: I u v:把v设为u的父节点,edge(u,v)的距离为ab ...

  9. 【35.86%】【POJ 1962】Corporative Network

    Time Limit: 3000MS Memory Limit: 30000K Total Submissions: 3943 Accepted: 1414 Description A very bi ...

随机推荐

  1. 获取选中行中的数据提取并且保存到txt

    function getchcount(query: TADOQuery): Integer;var i:integer;begin i:=0; with Query do begin Query.F ...

  2. 吴裕雄 Bootstrap 前端框架开发——Bootstrap 字体图标(Glyphicons):glyphicon glyphicon-time

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name ...

  3. SPI协议解析

    1. SPI物理层 SPI通讯需要使用4条线:3条总线和1条片选 . SPI遵循主从模式,3条总线分别是SCK.MOSI和MISO,片选线为nSS(低电平有效),SPI协议适用于一主多从的工作场景: ...

  4. S7-300数据处理基本知识(结尾以MW8+1 ADD指令实训仿真,并用状态表监控及刷写变量)

    数据处理基本知识汇总 STEP7 的数据类型包括什么? 基本数据类型 复杂数据类型 用于FB(功能块)的输入,输出参数类型 用于FC(功能)的输入,输出参数类型 基本数据类型是什么? 先列举12种数据 ...

  5. CGridCtrl只点击规定行中的按钮才弹出对话框

    在头文件中添加: afx_msg void OnClick(NMHDR* pNMHDR, LRESULT* pResult); 添加映射:ON_NOTIFY(NM_CLICK, IDC_CUSTOM1 ...

  6. 74.Python中ORM聚合函数详解:Max,Min

    Max和Min:获取指定对象的最大值和最小值. 1. 比如:想要获取Author表中的最大的年龄和最小的年龄.示例代码如下: from django.http import HttpResponse ...

  7. Web.config中executionTimeout的单位

    executionTimeout:表示允许执行请求的最大时间限制,单位为秒

  8. Bean 注解(Annotation)配置(3)- 依赖注入配置

    Spring 系列教程 Spring 框架介绍 Spring 框架模块 Spring开发环境搭建(Eclipse) 创建一个简单的Spring应用 Spring 控制反转容器(Inversion of ...

  9. iPhone系统固若金汤,为何还有人偷苹果手机去卖?

    2016年初,美国FBI希望苹果开发软件用以解锁一部嫌疑人的iPhone.苹果虽然帮助FBI从疑犯iCloud账户中提取数据,但有些数据仍然不可获取.由于不知道手机密码,FBI也无法打开手机.虽然在最 ...

  10. 洛谷 P5542 [USACO19FEB]Painting The Barn

    题目传送门 解题思路: 二维差分的板子题.题解传送门 AC代码: #include<iostream> #include<cstdio> using namespace std ...