LA3027简单带权并查集
题意:
有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简单带权并查集相关推荐
- POJ1703带权并查集(距离或者异或)
题意: 有两个黑社会帮派,有n个人,他们肯定属于两个帮派中的一个,然后有两种操作 1 D a b 给出a b 两个人不属于同一个帮派 2 A a b 问a b 两个人关系 输出 同一个帮派 ...
- POJ1988(带权并查集,搬砖块)
题意: 可以这样理解,有n快方形积木,一开始都是单独的放到哪,然后有两种操作 1 M a b 把a所在的那一堆落到b所在那一堆的上面(一开始自己是一堆) 2 C a 问a下面有多少个积木 ...
- hdu4829 带权并查集(题目不错)
题意: Information Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Tot ...
- POJ 1182 食物链 [并查集 带权并查集 开拓思路]
传送门 P - 食物链 Time Limit:1000MS Memory Limit:10000KB 64bit IO Format:%I64d & %I64u Submit ...
- 2020CCPC(长春) - Ragdoll(启发式合并+带权并查集)
题目大意:初始时给出 n 个集合,每个集合中都包含有一个数字,现在要求执行 m 次操作,每次操作分为下列三种类型: 1 x y:在 x 位置新建一个集合,并且放置一个数字 y 2 x y:合并集合 x ...
- 学习笔记——拓展域并查集和带权并查集
1,拓展域并查集 一般的并查集只能查找出各元素之间是否存在某一种相同的联系,如:a和b是亲戚关系,b和c是亲戚关系,这时就可以查找出a和c也存在亲戚关系.但如果存在多种相对的联系时一般的并查集就不行了 ...
- 2017乌鲁木齐区域赛I(带权并查集)
#include<bits/stdc++.h> using namespace std; int f[200010];//代表元 long long rl[200010];//记rl[i] ...
- BZOJ 2303 方格染色(带权并查集)
要使得每个2*2的矩形有奇数个红色,如果我们把红色记为1,蓝色记为0,那么我们得到了这2*2的矩形里的数字异或和为1. 对于每个方格则有a(i,j)^a(i-1,j)^a(i,j-1)^a(i-1,j ...
- hdu3234 带权并查集(XOR)
题意: 给你n个未知的正整数,有三总操作 I P V P的值是V I P Q V P XOR Q = V Q K ...
最新文章
- FSBL UBOOT KERNELROOTFS 启动流程详解 (未完待续)
- ​基于BCI的现代神经反馈有助于认知增强(一)
- Pytorch v0.4.1发布:添加频谱范数,自适应Softmax,优化CPU处理速度,添加异常检测NaN等
- tar命令核心应用案列及多重参数和find组合应用
- java学习(30):巩固练习
- Java String、StringBuffer、StringBuilder区别
- WINDOWS系统最近使用的项目路径
- VHDL-任意分频器(50%占空比)
- 2017双11核心技术揭秘—双十一海量数据下EagleEye的使命和挑战
- 接待员如何向客人upsell_前厅部接待员办理入住操作步骤
- mysql int_mysql中int(10)代表什么意思?
- jpg转bmp(使用libjpeg)
- https网站地图生成工具
- mysql:mysql数据库下载及安装(详细)
- DirectX11 骷髅头示例Demo
- 家庭教育机构如何线上线下灵活结合?
- python 二项式分布学习
- 指针java_Java中的指针
- 手把手教你如何推广博客网站
- 【老罗笔记】一万小时天才理论