首页 > 其他 > 详细

LA 并查集路径压缩

时间:2014-02-25 15:52:29      阅读:350      评论:0      收藏:0      [点我收藏+]

题目大意:有n个节点,初始时每个节点的父亲节点都不存在。有两种操作

I u v:把点节点u的父亲节点设为v,距离为|u-v|除以1000的余数。输入保证执行指令前u没有父亲节点。

E u:询问u到根节点的距离。

分析:并查集加路径压缩。

 

bubuko.com,布布扣
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cstdio>
using namespace std;

const int maxn=20010;
int f[maxn],d[maxn];

int findset(int x)
{
    if(f[x] !=x)
    {
        int root=findset(f[x]);
        d[x]+=d[f[x]];
        return f[x]=root;
    }
    else return x;
}

int main()
{
    int T,i,n,u,v;
    char c[5];
    scanf("%d",&T);
    while(T--)
    {
        scanf("%d",&n);
        for(i=1;i<=n;i++){ f[i]=i;d[i]=0;}
        while(scanf("%s",c) && c[0]!=O)
        {  
            if(c[0] == E)
            {
                scanf("%d",&u);
                findset(u);
                printf("%d\n",d[u]);
            }
            if(c[0] == I)
            {
                scanf("%d %d",&u,&v);
                f[u]=v;d[u]=abs(u-v)%1000;
            }
          
        }
    }
    return 0;
}
bubuko.com,布布扣

LA 并查集路径压缩

原文:http://www.cnblogs.com/xiong-/p/3565372.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!