题意:

      有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. hdu 1829-A Bug's LIfe(简单带权并查集)

    题意:Bug有两种性别,异性之间才交往, 让你根据数据判断是否存在同性恋,输入有 t 组数据,每组数据给出bug数量n, 和关系数m, 以下m行给出相交往的一对Bug编号 a, b.只需要判断有没有, ...

  2. poj 2492 a bug's life 简单带权并查集

    题意大致为找同性恋的虫子.... 这个比食物链要简单些.思路完全一致,利用取余操作实现关系之间的递推. 个人感觉利用向量,模和投影可能可以实现具有更加复杂关系的并查集. #include<ios ...

  3. 洛谷OJ P1196 银河英雄传说(带权并查集)

    题目描述 公元五八○一年,地球居民迁移至金牛座α第二行星,在那里发表银河联邦 创立宣言,同年改元为宇宙历元年,并开始向银河系深处拓展. 宇宙历七九九年,银河系的两大军事集团在巴米利恩星域爆发战争.泰山 ...

  4. POJ2492 A Bug's Life 带权并查集

    分析:所谓带权并查集,就是比朴素的并查集多了一个数组,记录一些东西,例如到根的距离,或者和根的关系等 这个题,权数组为relation 代表的关系  1 和父节点不同性别,0,和父节点同性别 并查集一 ...

  5. Cogs 1070. [焦作一中2012] 玻璃球游戏 带权并查集,逆序处理

    题目: http://cojs.tk/cogs/problem/problem.php?pid=1070 1070. [焦作一中2012] 玻璃球游戏 ★   输入文件:marbles.in   输出 ...

  6. poj1182-食物链-带权并查集-种类并查集

    (这应该是我写的第一个和带权并查集相关的题,还不是很了解,所以这篇博客我以后还会做修改,力求更号理解! 题意和思路: 中文题意,我简单提一下: A->B,B->C,C->A.A吃B, ...

  7. poj 1733 Parity game(带权并查集+离散化)

    题目链接:http://poj.org/problem?id=1733 题目大意:有一个很长很长含有01的字符串,长度可达1000000000,首先告诉你字符串的长度n,再给一个m,表示给你m条信息, ...

  8. CCPC-Wannafly Winter Camp Day3 Div1 - 石头剪刀布 - [带权并查集]

    题目链接:https://zhixincode.com/contest/14/problem/I?problem_id=211 样例输入 1  3 5 2 1 1 2 1 2 1 1 2 3 2 1 ...

  9. hihoCoder 1515 分数调查(带权并查集)

    http://hihocoder.com/problemset/problem/1515 题意: 思路: 带权并查集的简单题,计算的时候利用向量法则即可. #include<iostream&g ...

随机推荐

  1. C#中事件流程的简单理解

    C#中事件流程的简单理解 C#中事件基于委托,要理解事件要先理解委托,但是现在我还没想好怎么写委托,如果不懂委托可以先找找委托的文章 事件基于委托,为委托提供了一种发布/订阅机制 一上来就是这句话,很 ...

  2. 测试平台系列(4) 使用Flask蓝图(blueprint)

    使用Flask蓝图(blueprint) 回顾 先来看一下上一篇的作业吧,使用「logbook」的时候,遇到了时区不对的情况.那么我们怎么去解决这个问题呢? 实际上logbook默认采用的是世界标准时 ...

  3. python3 批量处理域名解析

    域名批量解析,快速确认域名的存活性及IP地址,脚本中包含了具体的用法和简要说明 #!/usr/bin/env python # -*- coding:utf-8 -*- # python3.6 fro ...

  4. synchronized中锁是怎么升级的

    在JDK1.6以前,使用synchronized就只有一种方式即重量级锁,而在JDK1.6以后,引入了偏向锁,轻量级锁,重量级锁,来减少竞争带来的上下文切换. 锁升级主要依赖对象头中的Mark Wor ...

  5. Apache配置 10. 访问控制-禁止解析PHP

    (1)简述 对于使用PHP语言编写的网站,有一些目录是有需求上传文件的.如果网站代码有漏洞,让黑客上传了一个用PHP写的木马,由于网站可以执行PHP程序,最终会让黑客拿到服务器权限. 为了避免这种情况 ...

  6. P2055 [ZJOI2009]假期的宿舍 题解(二分图)

    题目链接 P2055 [ZJOI2009]假期的宿舍 解题思路 因为懒,提供一种不连边,直接根据题目给出的邻接矩阵进行匈牙利算法的思路. \(a[i][j]\)表示\(i\)能不能睡\(j\)的床,需 ...

  7. 习题3_08循环小数(JAVA语言)

    package 第三章习题; import java.util.Arrays; import java.util.Scanner; /*  * 输入整数a和b(0<=a<=3000,1&l ...

  8. windows使用vscode设置免密登录linux服务器

    秘钥原理解释 id_rsa.pub是公钥,部署在服务器上 id_rsa是私钥,放在windows本地 本质上它们都是个文本文件 操作流程 生成秘钥对(windows和linux均可) ssh-keyg ...

  9. 全量同步Elasticsearch方案之Canal

    一.前言 Canal 是阿里的一款开源项目,纯 Java 开发.基于数据库增量日志解析,提供增量数据订阅&消费,目前主要支持了 MySQL(也支持 mariaDB). Canal 除了支持 b ...

  10. 【linux】驱动-3-字符设备驱动

    目录 前言 3. 字符设备驱动 3.1 Linux设备分类 3.2 设备相关概念 3.2.1 设备号 3.2.2 设备节点 3.2.3 APP open 文件理解 ** 3.3 数据结构 3.3.1 ...