CDOJ 1070 秋实大哥打游戏 带权并查集
链接
Time Limit:1000MS Memory Limit:65535KB 64bit IO Format:%lld & %llu
Description
”也许人生就是游戏,你却执意耕耘着春秋。” —— 秋实大哥叹道。
秋实大哥是一个喜欢玩游戏的人,相较于其他种类的游戏,秋实大哥更喜欢自由开放的沙盒游戏,尤其是minecraft
。
现在,秋实大哥发现了N个独立的小岛(编号1,2,3…..N),于是他要把这些小岛连起来。
每一次,秋实大哥会选择两个不同的小岛x(x是所在集合的中心)和y(y不一定是集合的中心),如果小岛x和小岛y不在一个集合里,就建立一条距离为|x−y| mod 1000的边,
把这两片小岛合并为一个新的集合,中心为y原来所在的集合中心。
但,秋实大哥想实时知道某一个小岛距当前所在集合中心的距离。由于秋实大哥忙着过节,所以他想请你帮忙。
Input
第一行有一个整数N表示小岛的个数。
接下来有若干行,每一行为以下两种操作中的一种:
I x y : 表示秋实大哥想要在x和y之间建立一条边。
E x : 询问x到当前集合中心的距离。
输入以一个大写字母O
结束。
1≤N≤100000,操作数≤200000。
Output
对于每一次询问,输出一个整数,即x到当前集合中心的距离,占一行。
Sample Input
3
I 1 2
E 1
I 3 1
E 3
O
Sample Output
1
3
要求:复习时重做一遍
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <cmath>
#include <vector>
#include <queue>
#include <stack>
#include <map>
#include <algorithm>
#include <set>
using namespace std;
typedef long long LL;
typedef unsigned long long Ull;
#define MM(a,b) memset(a,b,sizeof(a));
const double eps = 1e-10;
const int inf = 0x3f3f3f3f;
const double pi=acos(-1);
const int maxn=100000;
char s[5];
int f[maxn+10],dis[maxn+10];int findr(int x)
{if(f[x]!=x){int par=f[x];//在路径压缩之前保存连接的边,否则路径压缩后直接指向根节点f[x]=findr(f[x]);//递归dis[x]+=dis[par];}return f[x];
}void unite(int x,int y)
{int ry=findr(y);if(x==ry) return;f[x]=y;//建立一条边dis[x]=abs(x-y)%1000;//这个初始化非常重要,好好想想
}int main()
{int n;while(~scanf("%d",&n)){for(int i=1;i<=n;i++) {f[i]=i;dis[i]=0;}while(~scanf("%s",s)){int x,y;if(s[0]=='I'){scanf("%d %d",&x,&y);unite(x,y);}else if(s[0]=='E'){scanf("%d",&x);findr(x);printf("%d\n",dis[x]);}else break;}}return 0;
}
分析:写的第一道带权并查集,还是挺有意思的,跟普通并查集比起来就是边多了权值,
抓住核心式子,dis[child to par ]+=dis[par to root],以儿子和父亲间合并的那条边为桥梁
转载于:https://www.cnblogs.com/smilesundream/p/5440246.html
CDOJ 1070 秋实大哥打游戏 带权并查集相关推荐
- cdoj 1070 秋实大哥打游戏 带权并查集
题目链接: http://acm.uestc.edu.cn/#/problem/show/1070 题意: 题解: 带权并查集 每次往上更新的时候,顺便把边权更新了就好 记住得路径压缩 代码: 1 # ...
- CODJ 1070 秋实大哥打游戏 并查集
有N个独立的点,标号为1,2,3,-N.现在要把他们连接起来,每次选取x和y两个点,x是它所处集合的中心,y不一定是它所处集合的中心,然后在xy间连一条长度为|x-y|mod1000的边.然后把这两个 ...
- 2015 UESTC 数据结构专题H题 秋实大哥打游戏 带权并查集
秋实大哥打游戏 Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://acm.uestc.edu.cn/#/contest/show/59 Descr ...
- 信息传递(带权并查集求最小环
P2661 [NOIP2015 提高组] 信息传递 题意: nnn 个同学玩信息传递,第 iii 个同学只会将信息传递给同学 TiT_iTi,游戏开始时每个人只知道自己的生日,一轮游戏同学 iii ...
- 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 ...
- 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下面有多少个积木 ...
- LA3027简单带权并查集
题意: 有n个点,一开始大家都是独立的点,然后给出一些关系,a,b表示a是b的父亲节点,距离是abs(a-b)%1000,然后有一些询问,每次询问一个节点a到父亲节点的距离是多少? 思路: ...
最新文章
- 2021-07-27查看图像像素值类别
- Cisco的相关配置
- linux docker安装mysql_Linux-docker安装mysql
- C# WinForm开发系列 - DataGrid/DataGridView
- 【信息图】此图阐述了社交媒体行业发展,作为知识普及贴
- np.reshape带给我的内存错误
- Windows与Linux区别1
- 产品认知:产品经理进入新公司第一件事该做什么?
- 真格量化-历史波动率
- VS2015 vc++ 项目出现new.h找不到的错误
- java解析带斜杠的参数_Java Spring MVC应用程序仅接受带有斜杠的POST请求
- JS执行Promise
- 简单的@Async使用 自定义连接池
- 计算机windows实验原理,Windows上机实验报告
- 计算机语言环境变量,Win7环境变量中如何切换语言
- mysql每次查询加流水号_通过SQL自动添加流水号
- malloc函数的用法详解:
- 服务器端身份验证技术,身份认证技术和协议的常用方法
- r语言 c d生产函数,R语言定义多维数组和数组的运算
- FineBI 中 逻辑函数if 嵌套 没有else
热门文章
- 解决安装svn后出现Unable to connect to a repository at URL以及认证失败
- 疯了吧!面试官 5 连问一个 TCP 连接可以发多少个 HTTP 请求?
- 一篇文章带你详解 HTTP 协议之报文首部及字段详解(中)
- 牛逼哄哄的 RPC 框架,底层到底什么原理?
- 【Scratch】青少年蓝桥杯_每日一题_5.25_排序
- 【Scratch】青少年蓝桥杯_每日一题_3.17_蹦床
- 高度平衡二叉树的构建_平衡二叉树建立及其增删改查(JAVA)
- python局部变量想作用于全局_python 局部和全局作用域
- AI:神经网络调参(数据、层数、batch大小,学习率+激活函数+正则化+分类/回归)并进行结果可视化
- Py之yacs:yacs的简介、安装、使用方法之详细攻略