由于并查集让我很自闭(其实是我太弱了),所以学习了加权并查集,这是例题:

题目链接: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]银河英雄传说的更多相关文章

  1. Luogu P1196 [NOI2002]银河英雄传说:带权并查集

    题目链接:https://www.luogu.org/problemnew/show/P1196 题意: 有30000个战舰队列,编号1...30000. 有30000艘战舰,编号1...30000, ...

  2. Luogu P1196 [NOI2002]银河英雄传说

    一年没写博客了(滑稽). 这道题很玄学,导致自己都有一个坑人的问题求解.如果有大佬有能力求帮助:https://www.luogu.org/discuss/show?postid=30231 再来讲一 ...

  3. [Luogu 1196] NOI2002 银河英雄传说

    [Luogu 1196] NOI2002 银河英雄传说 话说十六年前的 NOI 真简单... 我一开始还把题看错了- 题意:一群人,每个人各自成一队,每次命令让两队首位相接合成一队,每次询问问你某两个 ...

  4. 洛谷——P1196 [NOI2002]银河英雄传说

    P1196 [NOI2002]银河英雄传说 题目大意: 给你一个序列,支持两种操作: 合并指令为$M_{i,j}$j​,含义为第i号战舰所在的整个战舰队列,作为一个整体(头在前尾在后)接至第j号战舰所 ...

  5. P1196 [NOI2002]银河英雄传说

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

  6. 洛谷P1196 [NOI2002] 银河英雄传说

    #include<cstdio> #include<cstring> #include<cstdlib> #include<cmath> #includ ...

  7. 洛谷 P1196 [NOI2002]银河英雄传说

    题意简述 有30000列,每列都有一艘战舰,编号1~30000 有2种操作: 1.将一列的战舰运到另一列 2.询问两个战舰是否在同一列,如果是,求出它们之间的距离 题解思路 并查集, 维护每个点x离自 ...

  8. 【洛谷P1196】[NOI2002]银河英雄传说

    银河英雄传说 题目链接 并查集时记录下以i为首的队列的长度(如果存在这个队列)num[i],便于合并, 和点i到队首的距离front[i],便于查询(在find时维护) #include<ios ...

  9. NOI2002 银河英雄传说

    P1196 银河英雄传说 367通过 1.1K提交 题目提供者该用户不存在 标签并查集NOI系列2001(或之前) 难度提高+/省选- 提交该题 讨论 题解 记录 最新讨论 莱因哈特什么鬼? 私人代码 ...

随机推荐

  1. 结构体数组排序:1004 成绩排名 【pta】

    结构体模板 struct STU { string name; //用string可以代替char string num; int s; }; sort是用快速排序实现的,属于不稳定排序,stable ...

  2. Windows下配置Erlang环境

    1.下载地址 http://www.erlang.org/downloads 2.下载文件 下载 OTP 22.2 Windows 64-bit Binary File 3.配置环境变量 将下载的安装 ...

  3. css积累

    1. 图片底部3像素的问题解决方案        display: inline-block;       vertical-align: bottom;

  4. 关于windows nginx不能启动问题的解决,史上最坑系列之一(原文)

    我是直接在官方网址下载windows1.6稳定版的nginx,之所以下载它是因为在window下方便学习,更好的在linux安装和学习nginx. 下载到D:\nginx学习\,解压它,并进入启动它 ...

  5. vue的页面怎么显示到android的webview中

    链接:https://www.jianshu.com/p/0dd98476bba0

  6. win10无法登陆SSG进行WEB UI管理

    故障描述:尝试登录SSG设备时,无法无法刷出页面,但是设备时可以ping通的(内部接口),可以Telnet上设备,就是无法通过网页登录. 深入测试:win7的系统可以登录,win10的不行,浏览器报协 ...

  7. 【MySQL】数据类型之字符相关

    " 目录 字符类型 char类型 varchar类型 实测 总结 枚举类型与集合类型 字符类型 官网:https://dev.mysql.com/doc/refman/5.7/en/char ...

  8. bitnami-redmine 一键安装

    下载bitnami-redmine https://bitnami.com/stack/redmine 安装 选择语言 设置登陆用户名和密码,数据库用户名root,数据库密码也是这个设置的密码 其他下 ...

  9. Linux - 终端terminal进入交互环境的快捷键

    1. 上一页 ctrl + b 2. 下一页 空格 / ctrl + f 3. 上半页 ctrl + u 4. 下半页 ctrl + d 5. 上一行 k 6. 下一行 j 7. 向上查找 ?key ...

  10. 创业学习---《如何预判创业可行性》--B-1.预判模块---HHR计划---以太一堂

    <如何预判创业可行性>----对创业进行占卜 一,<开始学习> 1,预热思考题: (1)预判一个模式的可行性.你有一个朋友要创业,给你讲了他的创业计划,你帮他判断一下是否靠谱. ...