题意:
      有n个点,一开始大家都是独立的点,然后给出一些关系,a,b表示a是b的父亲节点,距离是abs(a-b)%1000,然后有一些询问,每次询问一个节点a到父亲节点的距离是多少?

思路:
     可以直接简单带权并查集就能搞定,核心代码是这样,设s_x[i]表示i到自己父亲节点的距离,然后
//处理并查集的时候
int finds(int x)
{
  if(x == mer[x]) return x;
  int k = mer[x];
  mer[x] = finds(mer[x]);
  mer[x] += mer[k];
  return mer[x];
}

//建立关系的时候

mer[a] = b;
s_x[a] = abs(a - b) % 1000

//询问的时候
x = finds(a);//这一部别忘记了,因为并查集用了路径压缩,查询一次之后才能更新到他到根的距离,不然后可能只是他到他上一个节点的距离,查询后经过路径压缩会把他上一个节点变成他的根节点。
printf(s_x[a]);

#include<stdio.h>
#include<string.h>

#define N 22000

int mer[N] ,s_x[N];

int abss(int x)
{
   return x > 0 ? x : -x;
}

int finds(int x)
{
    if(x == mer[x]) return x;
    int k = mer[x];
    mer[x] = finds(mer[x]);
    s_x[x] =(s_x[x] + s_x[k]);
    return mer[x];
}

int main ()
{
    int t ,n ,a ,b;
    char str[5];
    scanf("%d" ,&t);
    while(t--)
    {
       scanf("%d" ,&n);
       for(int i = 0 ;i <= n ;i ++)
       mer[i] = i ,s_x[i] = 0;
       while(~scanf("%s" ,str) && str[0] != 'O')
       {
          if(str[0] == 'I')
          {
             scanf("%d %d" ,&a ,&b);
             mer[a] = b;
             s_x[a] = abss(a - b) % 1000;
          }
          else
          {
               scanf("%d" ,&a);
               finds(a);
               printf("%d\n" ,s_x[a]);
          }
       }
    }
    return 0;
}

LA3027简单带权并查集相关推荐

  1. POJ1703带权并查集(距离或者异或)

    题意:       有两个黑社会帮派,有n个人,他们肯定属于两个帮派中的一个,然后有两种操作 1 D a b 给出a b 两个人不属于同一个帮派 2 A a b 问a b 两个人关系 输出 同一个帮派 ...

  2. POJ1988(带权并查集,搬砖块)

    题意:        可以这样理解,有n快方形积木,一开始都是单独的放到哪,然后有两种操作 1 M a b 把a所在的那一堆落到b所在那一堆的上面(一开始自己是一堆) 2 C a 问a下面有多少个积木 ...

  3. hdu4829 带权并查集(题目不错)

    题意: Information Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Tot ...

  4. POJ 1182 食物链 [并查集 带权并查集 开拓思路]

    传送门 P - 食物链 Time Limit:1000MS     Memory Limit:10000KB     64bit IO Format:%I64d & %I64u Submit  ...

  5. 2020CCPC(长春) - Ragdoll(启发式合并+带权并查集)

    题目大意:初始时给出 n 个集合,每个集合中都包含有一个数字,现在要求执行 m 次操作,每次操作分为下列三种类型: 1 x y:在 x 位置新建一个集合,并且放置一个数字 y 2 x y:合并集合 x ...

  6. 学习笔记——拓展域并查集和带权并查集

    1,拓展域并查集 一般的并查集只能查找出各元素之间是否存在某一种相同的联系,如:a和b是亲戚关系,b和c是亲戚关系,这时就可以查找出a和c也存在亲戚关系.但如果存在多种相对的联系时一般的并查集就不行了 ...

  7. 2017乌鲁木齐区域赛I(带权并查集)

    #include<bits/stdc++.h> using namespace std; int f[200010];//代表元 long long rl[200010];//记rl[i] ...

  8. BZOJ 2303 方格染色(带权并查集)

    要使得每个2*2的矩形有奇数个红色,如果我们把红色记为1,蓝色记为0,那么我们得到了这2*2的矩形里的数字异或和为1. 对于每个方格则有a(i,j)^a(i-1,j)^a(i,j-1)^a(i-1,j ...

  9. hdu3234 带权并查集(XOR)

    题意:       给你n个未知的正整数,有三总操作       I P V            P的值是V       I P Q V          P XOR Q = V       Q K ...

最新文章

  1. FSBL UBOOT KERNELROOTFS 启动流程详解 (未完待续)
  2. ​基于BCI的现代神经反馈有助于认知增强(一)
  3. Pytorch v0.4.1发布:添加频谱范数,自适应Softmax,优化CPU处理速度,添加异常检测NaN等
  4. tar命令核心应用案列及多重参数和find组合应用
  5. java学习(30):巩固练习
  6. Java String、StringBuffer、StringBuilder区别
  7. WINDOWS系统最近使用的项目路径
  8. VHDL-任意分频器(50%占空比)
  9. 2017双11核心技术揭秘—双十一海量数据下EagleEye的使命和挑战
  10. 接待员如何向客人upsell_前厅部接待员办理入住操作步骤
  11. mysql int_mysql中int(10)代表什么意思?
  12. jpg转bmp(使用libjpeg)
  13. https网站地图生成工具
  14. mysql:mysql数据库下载及安装(详细)
  15. DirectX11 骷髅头示例Demo
  16. 家庭教育机构如何线上线下灵活结合?
  17. python 二项式分布学习
  18. 指针java_Java中的指针
  19. 手把手教你如何推广博客网站
  20. 【老罗笔记】一万小时天才理论

热门文章

  1. 《机器人学经典教程》——2.3 人工智能
  2. 优秀简历要遵循哪些规则
  3. Microsoft Speech SDK 编程入门
  4. 这样就可以很方便的知道明天的天气了
  5. C#函数实现的小功能
  6. Python爬虫(八)_正则表达式
  7. 控件自定义和QQ皮肤
  8. mac Path had bad ownership/permissions
  9. 答辩完了该思考些什么
  10. 都都的第一次自我游戏