题意:一个企业要去收购一些公司把,使的每个企业之间互联,刚开始每个公司互相独立

   给出n个公司,两种操作

   E I:询问I到I它连接点最后一个公司的距离

   I I J:将I公司指向J公司,也就是J公司是I公司的上级,距离为abs(I-J)%1000(貌似G++不支持abs,PE了两发)

思路:转化一下题意就行了,首先刚开始的时候每个公司都是独立的,I操作就是并查集中合并操作,将I这课树并到J这个树上,

   E操作要求的东西就是 I到I的根节点的距离,先看一个没有路径压缩直接暴力的方法把、(本以为不会过的,因为数据很大)

    时间是:2222ms  被系统藐视了

  等等,现已题目中所给的例子来把 直接执行完I 操作 ,最后得到的是  3->1->2->4

 那么E 3所得到的结果是 (3-1)%1000+(2-1)%1000+(4-2)%1000=5

  并查集本身就是这样的结果,所以直接从子节点向根节点找过去,一边找一遍求距离

  

#include<cstdio>
#include<cstring>
#include<cmath>
const int qq=20000+5;
int pre[qq],sum[qq];
int ans;
void init(int n)
{
for(int i = 0; i <= n; ++i){
pre[i]=i;
sum[i]=0;
}
}
int find(int x)
{
if(x==pre[x]) return x;
else{
int dis=x-pre[x]>0?x-pre[x]:pre[x]-x;
dis%=1000;
ans+=dis;
return find(pre[x]);
}
}
int main()
{
int t,n;scanf("%d",&t);
while(t--){
scanf("%d",&n);
init(n);
char s[10];
while(scanf("%s",s) && (s[0]!='O')){
if(s[0] == 'E'){
int a;
scanf("%d",&a);
ans = 0;
find(a);
printf("%d\n",ans);
}
else if(s[0] == 'I'){
int a,b;
scanf("%d%d",&a,&b);
pre[a] = b;
}
}
}
return 0;
}

路径压缩版、 66MS

#include<cstdio>
#include<cstring>
#include<cmath>
const int qq=20000+5;
int pre[qq],dis[qq];
int ans;
void init(int n)
{
for(int i = 0; i <= n; ++i){ //初始化、
pre[i]=i;
dis[i]=0;
}
}
int find(int x) //只想说递归的调用真的很神奇,然而我还是个半桶水
{
if(x==pre[x]) return x;
int flag=find(pre[x]); // 在find函数中直接进行路径压缩
dis[x]=dis[x]+dis[pre[x]]; // 一边压缩一遍更新子节点到根节点的距离值
return pre[x]=flag; //这里是压缩路径、
}
int main()
{
int t,n;scanf("%d",&t);
while(t--){
scanf("%d",&n);
init(n);
char s[10];
while(scanf("%s",s) && (s[0]!='O')){
if(s[0] == 'E'){
int a;
scanf("%d",&a);
find(a); //对于要找的那个a,在此之前去压缩路径并更新到根节点的距离值
printf("%d\n",dis[a]);
}
else if(s[0] == 'I'){
int a,b;
scanf("%d%d",&a,&b);
pre[a]=b; // 合并
int ans=a-b>0?a-b:b-a;
ans%=1000; //求距离、
dis[a]=ans; //然后赋值
}
}
}
return 0;
}

UVA 3027 Corporative Network 带权并查集、的更多相关文章

  1. UVALive 3027 Corporative Network 带权并查集

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

  2. POJ1962Corporative Network[带权并查集]

    Corporative Network Time Limit: 3000MS   Memory Limit: 30000K Total Submissions: 3945   Accepted: 14 ...

  3. POJ1962:Corporative Network【带权并查集】

    <题目链接> 题目大意: n个节点,若干次询问,I x y表示从x连一条边到y,权值为|x-y|%1000:E x表示询问x到x所指向的终点的距离.   解题分析: 与普通的带权并查集类似 ...

  4. 【poj 1962】Corporative Network(图论--带权并查集 模版题)

    P.S.我不想看英文原题的,但是看网上题解的题意看得我 炒鸡辛苦&一脸懵 +_+,打这模版题的代码也纠结至极了......不得已只能自己翻译了QwQ . 题意:有一个公司有N个企业,分成几个网 ...

  5. UVA 12232 - Exclusive-OR(带权并查集)

    UVA 12232 - Exclusive-OR 题目链接 题意:有n个数字.一開始值都不知道,每次给定一个操作,I a v表示确认a值为v,I a b v,表示确认a^b = v,Q k a1 a2 ...

  6. UVA - 10004 Bicoloring(判断二分图——交叉染色法 / 带权并查集)

    d.给定一个图,判断是不是二分图. s.可以交叉染色,就是二分图:否则,不是. 另外,此题中的图是强连通图,即任意两点可达,从而dfs方法从一个点出发就能遍历整个图了. 如果不能保证从一个点出发可以遍 ...

  7. 【bzoj 1202】[HNOI2005] 狡猾的商人(图论--带权并查集+前缀和)

    题意:一个账本记录了N个月以来的收入情况,现在有一个侦探员不同时间偷看到M段时间内的总收入,问这个账本是否为假账. 解法:带权并查集+前缀和.   判断账本真假是通过之前可算到的答案与当前读入的值是否 ...

  8. 【poj 1988】Cube Stacking(图论--带权并查集)

    题意:有N个方块,M个操作{"C x":查询方块x上的方块数:"M x y":移动方块x所在的整个方块堆到方块y所在的整个方块堆之上}.输出相应的答案. 解法: ...

  9. 并查集——poj2236(带权并查集)

    题目:Wireless Network 题意:给定n台已损坏计算机的位置和计算机最远通信距离d,然后分别根据命令执行以下两种操作: "O p" (1 <= p <= N ...

随机推荐

  1. 对C语言内存对齐的初步了解

    在解释内存对齐的作用前,先来看下内存对齐的规则: 1. 对于结构的各个成员,第一个成员位于偏移为0的位置,以后每个数据成员的偏移量必须是min(#pragma pack()指定的数,这个数据成员的自身 ...

  2. linux 查看磁盘空间占用情况

    工作中有时被分配的测试机空间不大,经常遇到磁盘空间占满的情况.排查过程如下: 一.首先使用df -h 命令查看磁盘剩余空间,通过以下图看出/目录下的磁盘空间已经被占满. 二.进入根目录,因为最近常用的 ...

  3. Python操作SQLite数据库的方法详解

    Python操作SQLite数据库的方法详解 本文实例讲述了Python操作SQLite数据库的方法.分享给大家供大家参考,具体如下: SQLite简单介绍 SQLite数据库是一款非常小巧的嵌入式开 ...

  4. intellij idea cpu占用率太大太满 运行速度太慢解决方案

    1.关掉代码检查. setting -> Editor -> Inspections,把右面方框框里的对勾全去掉,或者根据需要去掉.原理是关闭不必要的代码检查,提高速度. 2.关掉多余的插 ...

  5. VirtualBox安装,VirtualBox安装CentOS

    1.进入VirtualBox官网下载页,找到对应的版本 https://www.virtualbox.org/wiki/Downloads 按步骤安装好 2.进入CentOS官网下载页,找到对应的版本 ...

  6. PHP学习(类型转化)

    PHP 在变量定义中不需要(或不支持)明确的类型定义:变量类型是根据使用该变量的上下文所决定的.也就是说,如果把一个 string 值赋给变量 $var , $var 就成了一个 string .如果 ...

  7. 【JZOJ3873】【NOIP2014八校联考第4场第2试10.20】乐曲创作(music)

    ujfuiaty 小可可是音乐学院的一名学生,他需要经常创作乐曲完成老师布置的作业. 可是,小可可是一个懒惰的学生.所以,每次完成作业时,他不会重新创作一首新的乐曲,而是去修改上一次创作过的乐曲作为作 ...

  8. JS对HTML实体字符转义和反转义

    一.名词解释 HTML实体字符: 由于在HTML中有些符号是预留的,比如在html中不能直接使用尖括号(‘<’或‘>’),会被误认为标签符号.所以需要通过HTML实体字符去进行替换: HT ...

  9. 【Django入坑之路】Django后台上传图片,以及前端的显示

    #setting配置: MEDIA_URL = "/media/" MEDIA_ROOT = os.path.join(BASE_DIR, "media") # ...

  10. day5 from 金角大王

    Python 之路 Day5 - 常用模块学习   本节大纲: 模块介绍 time &datetime模块 random os sys shutil json & picle shel ...