洛谷P1196 银河英雄传说
大意:你有30000个队列,第i个队列中只有i
有T个操作,1,把某个队列头接到另一个队列尾。
2,问两个元素之间的距离。
本题主要有三种解法。
①带权并查集。
具体来说就是,并查集维护当前集合的大小,这个点距离代表元(队首)的边数。
然后把合并和路径压缩魔改一下。询问的时候就直接取距离之差。
#include <cstdio> const int N = ; int fa[N], sum[N], siz[N];
char str[]; inline int find(int x, int &s) {
if(fa[x] == x) {
s = ;
return x;
}
int t = find(fa[x], s);
s += sum[x];
sum[x] = s;
return fa[x] = t;
} inline void merge(int x, int y) {
int a, b;
x = find(x, a);
y = find(y, b);
fa[x] = y;
sum[x] = siz[y];
siz[y] += siz[x];
return;
} inline int ask(int x, int y) {
int a, b;
x = find(x, a);
y = find(y, b);
if(x != y) {
return -;
}
return (a > b ? a - b : b - a) - ;
} int main() {
int n;
scanf("%d", &n);
for(int i = ; i <= ; i++) {
fa[i] = i;
siz[i] = ;
}
for(int i = , x, y; i <= n; i++) {
scanf("%s%d%d", str, &x, &y);
if(str[] == 'M') {
merge(x, y);
}
else {
printf("%d\n", ask(x, y));
}
} return ;
}
AC代码
②平衡树
这个太暴力了......开30000颗平衡树即可。
③离线(kruskal重构树)
重构的时候把顺序搞一下,然后提出来DFS序,直接回答询问。
洛谷P1196 银河英雄传说的更多相关文章
- NOI2002 洛谷 P1196 银河英雄传说
神奇的并查集问题 题目描述 公元五八○一年,地球居民迁移至金牛座α第二行星,在那里发表银河联邦 创立宣言,同年改元为宇宙历元年,并开始向银河系深处拓展. 宇宙历七九九年,银河系的两大军事集团在巴米利恩 ...
- 洛谷—— P1196 银河英雄传说
https://www.luogu.org/problem/show?pid=1196 题目描述 公元五八○一年,地球居民迁至金牛座α第二行星,在那里发表银河联邦创立宣言,同年改元为宇宙历元年,并开始 ...
- 洛谷 [p1196] 银河英雄传说
所谓带权并查集 本题所求的不止是两个编号之间是否有关系,还要求两个编号之间有什么关系,这就要求我们维护多个数组,fa[]数组维护两个编号之间的连通性,dis[]维护编号为i的战舰到fa[i]之间的距离 ...
- [洛谷P4847]银河英雄传说V2
题目大意:有$n(n\leqslant2\times10^5)$个序列,有$m(m\leqslant2\times10^5)$个操作,分三种: 1. $M\;x\;y:$把$x$所在的序列放在$y$所 ...
- Luogu P1196 银河英雄传说
Luogu P1196 银河英雄传说 我们考虑用并查集来维护战舰的情况. 同时,我们用一个$d$数组来记录$x$与$fa[x]$之间的距离.再用$size$数组记录战舰当前所在列的战舰数. 易知两艘在 ...
- 加权并查集(银河英雄传说,Cube Stacking)
洛谷P1196 银河英雄传说 题目描述 公元五八○一年,地球居民迁移至金牛座α第二行星,在那里发表银河联邦创立宣言,同年改元为宇宙历元年,并开始向银河系深处拓展.宇宙历七九九年,银河系的两大军事集团在 ...
- NOI2002_ Galaxy银河英雄传说86
NOI2002_ Galaxy银河英雄传说86 公元五八○一年,地球居民迁移至金牛座α第二行星,:宇宙历七九九年,银河系的两大军事集团在巴米利恩星:杨威利擅长排兵布阵,巧妙运用各种战术屡次以少 ...
- P4847 银河英雄传说V2 题解(Splay)
题目链接 P4847 银河英雄传说V2 解题思路 我天哪!!!\(splay\)在\(rotate\)的时候先\(upd(y)\)再\(upd(x)\)!!以后不能再因为这个\(WA\)一晚上了!!! ...
- 边带权并查集 学习笔记 & 洛谷P1196 [NOI2002] 银河英雄传说 题解
花了2h总算把边带权并查集整明白了qaq 1.边带权并查集的用途 众所周知,并查集擅长维护与可传递关系有关的信息.然而我们有时会发现并查集所维护的信息不够用,这时"边带权并查集"就 ...
随机推荐
- PLSQL过期:Your trial period for PL/SQL Developer is over .If you want to continue using this software ,you must purchase the retail version.
PLSQL过期:Your trial period for PL/SQL Developer is over .If you want to continue using this software ...
- webpack 配置 publicPath的理解
在学习webpack的时候,配置文件中有一个publicPath属性,一直不是很明白它到底是怎么用,也查了很多资料,得到最多的说法是当打包的时候,webpack会在静态文件路径前面添加publicPa ...
- 【图像处理】openCV库教程
openCV 基础学习 with:于士琪openCV基础 env:opencv3.4.0+vc2017集成开发环境 图像的表示:矩阵 1. 灰度矩阵 <br> 2. 彩色(多通道)如RGB ...
- Qt5 入门
main()函数中第一句是创建一个QApplication类的实例. 对于 Qt 程序来说,main()函数一般以创建 application 对象(GUI 程序是QApplication,非 GUI ...
- 67 个JavaScript和CSS实用工具、库与资源
在这篇文章中,我不会与大家谈论大型的前端框架,如 React.Angular.Vue 等,也没有涉及那些流行的代码编辑器,如 Atom.VS Code.Sublime,我只想与大家分享一个有助于提升开 ...
- fpm 打包教程
常用yum命令: Yum安装时需要安装到指定的文件夹,则需要 --installroot yum install --installroot=/usr/src/ vim 常用rpm命令: 常用yum仓 ...
- BZOJ3724PA2014Final Krolestwo——欧拉回路+构造
题目描述 你有一个无向连通图,边的总数为偶数.设图中有k个奇点(度数为奇数的点),你需要把它们配成k/2个点对(显然k被2整除).对于每个点对(u,v),你需要用一条长度为偶数(假设每条边长度为1)的 ...
- jsp大学课程hi实验:分页在线测评(session的使用)
project_1_updata_1_1.jsp <%@ page contentType="text/html;charset=utf-8" language=" ...
- Hibernate查询以及优化策略04
一. HQL查询 1. HQL(hibernate query language)单表查询 1.1 准备项目 创建项目: hinernate-03-query 引入jar,同前一个项目 复制实体(订单 ...
- Treasure Hunting HDU - 3468
题意: 输入一个n行m列的图 每次按字母顺序走最短路, 从一个字母走到下一个字母的过程中,只能拿走一个金子,求走完当前图中所有的字母后能拿到的金子的最大值 解析: bfs求最短路 对于一个金子如果 d ...