解题报告:luogu P1196 [NOI2002]银河英雄传说
由于并查集让我很自闭(其实是我太弱了),所以学习了加权并查集,这是例题:
题目链接:P1196 [NOI2002]银河英雄传说
不是很简单,但对于大佬还是签到题。
合并与路径压缩时直接维护\(dis[],num[]\),就好了,不过为什么要引进\(num[]\)呢?
真无奈。
不过++此题就很简单了,注意\(getf()\)有两句不要写反,否则就\(10\;pts\)了。一会代码里有标注。
复杂度是\(O(n\alpha(n))\)(其实我也不知道是这个吗,差不多就行了)
\(Code\):
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
const int MAXN=30005;
int f[MAXN],dis[MAXN],num[MAXN];
void init(int m){for(int i=1;i<=m;i++) f[i]=i,dis[i]=0,num[i]=1;}
int getf(int u)
{
if(f[u]==u) return u;
else
{
int now=f[u];
f[u]=getf(f[u]);//这句和下句反了会炸,为什么呢?
dis[u]+=dis[now];//注意dis是加,放过来事实上会加两次,就WA了。
num[u]=num[f[u]];
}
return f[u];
}
void merge(int u,int v)
{
int t1=getf(u),t2=getf(v);
if(t1!=t2)
{
f[t2]=t1;
dis[t2]=num[t1];
num[t2]+=num[t1];
num[t1]=num[t2];
}
return;
}
int n,l,r;
char flag;
int main()
{
init(MAXN);
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>flag>>l>>r;
if(flag=='M') merge(l,r);
else if(flag=='C')
{
int g=getf(l),h=getf(r);
if(g!=h)
{
printf("-1\n");
continue;
}
else printf("%d\n",abs(dis[l]-dis[r])-1);
}
}
return 0;
}
等再有道加权并查集,再写写心得?
解题报告:luogu P1196 [NOI2002]银河英雄传说的更多相关文章
- Luogu P1196 [NOI2002]银河英雄传说:带权并查集
题目链接:https://www.luogu.org/problemnew/show/P1196 题意: 有30000个战舰队列,编号1...30000. 有30000艘战舰,编号1...30000, ...
- Luogu P1196 [NOI2002]银河英雄传说
一年没写博客了(滑稽). 这道题很玄学,导致自己都有一个坑人的问题求解.如果有大佬有能力求帮助:https://www.luogu.org/discuss/show?postid=30231 再来讲一 ...
- [Luogu 1196] NOI2002 银河英雄传说
[Luogu 1196] NOI2002 银河英雄传说 话说十六年前的 NOI 真简单... 我一开始还把题看错了- 题意:一群人,每个人各自成一队,每次命令让两队首位相接合成一队,每次询问问你某两个 ...
- 洛谷——P1196 [NOI2002]银河英雄传说
P1196 [NOI2002]银河英雄传说 题目大意: 给你一个序列,支持两种操作: 合并指令为$M_{i,j}$j,含义为第i号战舰所在的整个战舰队列,作为一个整体(头在前尾在后)接至第j号战舰所 ...
- P1196 [NOI2002]银河英雄传说
题目描述 公元五八○一年,地球居民迁至金牛座α第二行星,在那里发表银河联邦创立宣言,同年改元为宇宙历元年,并开始向银河系深处拓展. 宇宙历七九九年,银河系的两大军事集团在巴米利恩星域爆发战争.泰山压顶 ...
- 洛谷P1196 [NOI2002] 银河英雄传说
#include<cstdio> #include<cstring> #include<cstdlib> #include<cmath> #includ ...
- 洛谷 P1196 [NOI2002]银河英雄传说
题意简述 有30000列,每列都有一艘战舰,编号1~30000 有2种操作: 1.将一列的战舰运到另一列 2.询问两个战舰是否在同一列,如果是,求出它们之间的距离 题解思路 并查集, 维护每个点x离自 ...
- 【洛谷P1196】[NOI2002]银河英雄传说
银河英雄传说 题目链接 并查集时记录下以i为首的队列的长度(如果存在这个队列)num[i],便于合并, 和点i到队首的距离front[i],便于查询(在find时维护) #include<ios ...
- NOI2002 银河英雄传说
P1196 银河英雄传说 367通过 1.1K提交 题目提供者该用户不存在 标签并查集NOI系列2001(或之前) 难度提高+/省选- 提交该题 讨论 题解 记录 最新讨论 莱因哈特什么鬼? 私人代码 ...
随机推荐
- Java开发中使用模拟接口moco响应中文时乱码
场景 在开发中需要依赖一些接口,比如需要请求一个返回Json数据的接口,但是返回Json数据的接口要么是没搭建,要么是交互比较复杂. 此时,就可以使用moco来模拟接口返回接口数据,以便开发和测试工作 ...
- 安装nodejs时提示Leaving directory
在按照标准的编译命令./configure =>make =>make install 在make的时候发生错误: ../deps/v8/src/base/platform/mutex.h ...
- Linux下查看当前文件大小的命令
1.ls -lht 列出每个文件的大小和当前目录所有文件大小总和 2.du -sh * 列出当前文件夹下的所有子文件的大小 看你需要啥样的,自己来吧
- python小白的爬虫之旅
1.爬www.haha56.net/main/youmo网站的内容 ieimport requests import re response=requests.get("http://www ...
- bootstrap下拉选择框倒三角所占宽度
<select id="edit" class="form-control" style="width:42%;padding-right: 3 ...
- Navicat连接两个不同机子上的mysql数据库,端口用换吗?--不用
经过了上一篇的努力,成功的连上了远程的mysql数据库 dos 命令行下的成功连接 在用Navicat连接的时候要注意: 端口仍然是3306,而不用去更改,并不会和上面的本机的Mysql连接使用的端口 ...
- 【代码审计】VAuditDemo 文件包含漏洞
在 index.php中先判断get过来的module是否设置了变量,如果已经设置,则包含module,并与字符串.inc拼接 inc格式一般是图标或者头像格式,因此我们可以初步判断,这个包含应该是基 ...
- lc 0223
目录 ✅ 669. 修剪二叉搜索树 描述 解答 java py ✅ 883. 三维形体投影面积 描述 解答 my understanding c py py map ?? python zip(*gr ...
- 一个高级PHP工程师所应该具备的(转自元如枫博客)
初次接触PHP,就为他的美所折服,于是一发不可收拾. 很多面试,很多人员能力要求都有“PHP高级工程师的字眼”,如果您真心喜欢PHP,并且您刚起步,那么我简单说说一个PHP高级工程师所应该具备的,希望 ...
- Ajax记载html