指南 第三章 例题6 UVALive 3027 Corporative Network(并查集的应用)

原创 2016年08月30日 18:13:18

题目链接:http://7xjob4.com1.z0.glb.clouddn.com/8709392d143986024ba5de491366d376

下面写下中文题意:
有n个结点,初始时每个结点的父结点都不存在。你的任务是执行一次I操作和E操作,格式如下:
(1)I u v:把结点u的父结点设为v,距离为|u-v|除以1000的余数。输入保证执行指令前u没有父结点。
(2)E u:询问u到根结点的距离。
【输入格式】
输入第一行为测试数据组数T。每组数据第一行为n(5<=n<=20000)。接下来有不超过20000行,每行一条指令,以“O”结尾。I指令的个数小于n。
【输出格式】
对于每条E指令,输出查询结果。
【分析】
因为题目只查询结点到根结点的距离,所以每棵树除了根结点不能换之外,其他结点的位置可以任意改变,这恰好符合并查集的特点,但是需要记录附加信息。如果记录每个结点到根的距离,那么每次I操作都要更新很多结点的信息,时间复杂度难以保证,因此考虑记下每个结点到父结点的距离为d[i],然后在路径压缩时维护这个d数组。

下面是AC代码:

#include<cstdio>
#include<algorithm>
using namespace std;

const int maxn=20000 + 10;
int pre[maxn],d[maxn];

int findset(int x)//路径压缩,同时维护d[i];结点i到树根的距离
{
    if(x==pre[x])
    {
        return x;
    }
    else
    {
        int root=findset(pre[x]);
        d[x]+=d[pre[x]];
        return pre[x]=root;
    }
}

int main()
{
    int t;
    scanf("%d",&t);
    while(t--)
    {
        int n,u,v;
        char cmd[9];
        scanf("%d",&n);
        for(int i=1;i<=n;i++)//初始化,每个结点单独是一棵树
        {
            pre[i]=i;
            d[i]=0;
        }
        while(scanf("%s",cmd)&&cmd[0]!='O')
        {
            if(cmd[0]=='E')
            {
                scanf("%d",&u);
                findset(u);
                printf("%d\n",d[u]);
            }
            else
            {
                scanf("%d%d",&u,&v);
                pre[u]=v;
                d[u]=abs(u-v)%1000;
            }
        }
    }
    return 0;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。

UVALive 4730 -树状数组+带权并查集

题意:有T组测试数据,每组数据的N表示有N个城市,接下来的N行里每行给出每个城市的坐标(0 (1)"road A B",表示将城市A和城市B通过一条道路连接,如果A和B原来属于不同的城市群,经过这个...
  • viphong
  • viphong
  • 2016年08月18日 23:19
  • 165

算法竞赛入门经典训练指南 例题1-15 网络 Network UVALive 3902

题目:https://vjudge.net/problem/UVALive-3902思路:贪心 + 无根树转有根树 + 搜索(我用的BFS) 以初始服务器为根节点算出各个叶节点的深度排好序,从深度最...
  • Rewriter_huanying
  • Rewriter_huanying
  • 2017年08月04日 17:20
  • 209

netty权威指南 ---------第三章 入门应用

本例以client端发送请求,server端返回当前时间
  • bingjing12345
  • bingjing12345
  • 2014年09月21日 09:50
  • 4572

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

Corporative Network Time Limit: 3000MS   Memory Limit: Unknown   64bit IO Format: %lld ...
  • hnust_xiehonghao
  • hnust_xiehonghao
  • 2013年06月26日 14:46
  • 1101

LA 3027 Corporative Network 合作网络【并查集+路径压缩】

LA 3027 Corporative Network 合作网络【并查集+路径压缩】
  • zhangyafei928
  • zhangyafei928
  • 2014年08月06日 16:41
  • 219

UVAalive 3027 Corporative Network(并查集的路径压缩维护)

A very big corporation is developing its corporative network. In the beginning each of the N enterpr...
  • u012313382
  • u012313382
  • 2015年07月22日 16:03
  • 403

Netty权威指南 第2版学习笔记3——Netty NIO开发指南

Netty入门应用Netty开发环境的搭建 使用Eclipse创建普通Java项目 从http://netty.io/下载 TCP粘包/拆包问题的解决之道分隔符和定长解码器的应用...
  • xundh
  • xundh
  • 2017年01月01日 22:00
  • 649

java学习之路4-java编程经典第三章习题及答案

《java实战经典》第三章习题 1.打印出所有的水仙花数,所谓的水仙花数就是指一个三位数,其各位数字立方和等于本身,比如153=1的立方+5的立方+3的立方 分析:这道题就是为了考...
  • likeaijiaqi
  • likeaijiaqi
  • 2013年11月16日 09:54
  • 790

UVALive 4670(AC自动机)

题意:有n个串,输出在t串出现次数最多的那个串,如果有多个按照输入顺序输入 题解:模板多,长度短,文本串长。适合多模式串匹配,适用AC自动机,这里使用map映射stirng为...
  • qq_24489717
  • qq_24489717
  • 2016年02月26日 18:14
  • 339

银行家算法实例

最近开始备考计算机四级,基本没有遇到什么问题,感觉计算机四级就是考理解型记忆力,银行家算法的题算是在计算机四级里少有的计算题。 例1.设系统中有三种类型的资源(A,B,C)和五个进程(P1,P2,P3...
  • muxuanyan
  • muxuanyan
  • 2015年07月09日 19:18
  • 12981
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:指南 第三章 例题6 UVALive 3027 Corporative Network(并查集的应用)
举报原因:
原因补充:

(最多只允许输入30个字)