P1196 [NOI2002] 银河英雄传说 带权并查集

这篇具有很好参考价值的文章主要介绍了P1196 [NOI2002] 银河英雄传说 带权并查集。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

P1196 [NOI2002] 银河英雄传说

使用带权并查集维护:

  1. 每个战舰所属列。
  2. 每个战舰到当前列第一个战舰的距离。
  3. 每列的战舰数量。
  • 如何求同列战舰之间相隔的战舰数量?

    使用两战舰到当前列头部的距离之差减1即可得到。

  • 如何在并查集合并时维护每个战舰到当前列第一个战舰的距离?

    当前点到当前点合并前的祖先的距离与祖先到链头的点距离相加,在find祖先递归的回溯过程中更新(只有find操作路径压缩会改变祖先)。

  • 每一次合并操作:把x的祖先(链头)插到y的链尾后面,更新x原链头到现链头(y链头)的距离,更新y所在列的大小。

    注意每次把x合并到y后面时,x的祖先就要变成y的祖先,顺序不能反,否则会打乱维护的2、3性质。文章来源地址https://www.toymoban.com/news/detail-620912.html

/*P1196 [NOI2002] 银河英雄传说
使用带权并查集维护:1.每个战舰所属列 2.每个战舰到当前列第一个战舰的距离 3.每列的战舰数量
- 如何求同列战舰之间相隔的战舰数量?使用两战舰到当前列头部的距离之差减1即可得到。
- 如何在并查集合并时维护每个战舰到当前列第一个战舰的距离?
  当前点到当前点合并前的祖先的距离与祖先到链头的点距离相加,在find祖先递归的回溯过程中更新(只有find操作路径压缩会改变祖先) 
- 每一次合并操作:把x的祖先(链头)插到y的链尾后面,更新x原链头到现链头(y链头)的距离,更新y所在列的大小 
	注意每次把x合并到y后面时,x的祖先就要变成y的祖先,顺序不能反,否则会打乱维护的2、3性质
*/
#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=100000;
int f[N],dis[N],siz[N];//并查集;到链头的距离;当前链的长度
int find(int x)//每次查询会更改祖先,必须维护dis 
{
	if(f[x]==x) return x;
	int fu=find(f[x]);
	dis[x]+=dis[f[x]];//原来dis存的是它到自己原来祖先(f[x])的距离,现在只需要加上其祖先到链头的距离
	return f[x]=fu; 
}
int main()
{
	for(int i=1;i<=30000;i++) f[i]=i,siz[i]=1;
	int t,x,y;
	char op;
	scanf("%d",&t);
	while(t--)
	{
		cin>>op; 
		scanf("%d%d",&x,&y);
		int fx=find(x),fy=find(y);
		if(op=='M')
		{
			dis[fx]+=siz[fy];//x的祖先(链头)插到y的链尾后面,x原链头到现链头(y链头)距离更新
			f[fx]=fy;//x合并到y后面,x的祖先变成y的祖先,顺序不能反
			siz[fy]+=siz[fx];//更新y所在列的大小 
			siz[fx]=0;//清零实际上可有可无, 
		}
		if(op=='C')
		{
			if(fx!=fy) printf("-1\n");
			else printf("%d\n",abs(dis[x]-dis[y])-1);
		}
	}
	return 0;
}

到了这里,关于P1196 [NOI2002] 银河英雄传说 带权并查集的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Linux下传说中的三剑客

    大家好!我是木荣。 今天给大家聊一聊Linux中文本操作的 三剑客:awk、grep、sed ,因其功能强大、使用频繁,且是Linux下文本处理的得力利器,常被称之为 文本三剑客 。 grep 常用于查找, sed 常用于取行和替换,而 awk 常用于运算。 有句玩笑话常说: 做Linux技术不识三剑客,玩

    2024年02月09日
    浏览(35)
  • 这就是传说中超难的N皇后?——详细图解!

    ✔️本文主题:回溯算法之N皇后 算法 ✔️题目链接:N皇后 大家好久不见,今天我们一起来学习一道很经典、也很有难度的一道题目—— N皇后 按照国际象棋的规则, 皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子。 n 皇后问题 研究的是如何将 n 个皇后放置在

    2024年02月02日
    浏览(43)
  • ACM/NOI/CSP比赛

    ACM、NOI、CSP这三项比赛均属于计算机科学与信息技术领域的竞赛,各自有着不同的定位、参赛对象及比赛形式。下面对这三项比赛进行详细介绍: ACM(ACM International Collegiate Programming Contest,ACM-ICPC) 概念 : ACM(国际大学生程序设计竞赛)是一项起源于1970年的全球性比赛,旨

    2024年04月16日
    浏览(25)
  • 《勇士传说》横版卷轴动作类游戏笔记-2.素材导入和整理

    该笔记为M_Studio老师今年免费更新的面向初学者的教程的笔记,只会更新老师免费更新的部分,中文课堂独有的部分不会更新。教程中所有的演示均为付费版下的演示,观看免费版的小伙伴可能会出现和笔记不同的情况,欢迎提问。 课程介绍: https://www.bilibili.com/video/BV1zY41

    2024年02月14日
    浏览(38)
  • P5691 [NOI2001] 方程的解数

    暴搜显然会TLE,所以这时候就应该请出DFS的伙伴——折半搜索(meet in the middle)了 折半搜索的思路就是先搜完后一半后,借助这一半的数据来搜索前一半,效率是原来的2倍 这个题怎么才能折半搜索呢? 看这个方程 我们可以将其拆成两半: 设k为n/2 这样就可以进行折半搜索

    2024年02月15日
    浏览(27)
  • ACM/NOI/CSP比赛经验分享

    ACM/NOI/CSP比赛经验分享 一、引言 在信息学竞赛的舞台上,ACM/ICPC、NOI和CSP是众多学子梦寐以求的赛事。这些比赛不仅考验了参赛者的算法和数据结构知识,更是对团队协作、时间管理和心理素质的全面挑战。作为一名曾经参与过这些比赛的选手,我深感其中的酸甜苦辣,也积

    2024年02月19日
    浏览(32)
  • 数据结构几种常见图的邻接矩阵的画法(有向图带权值,有向图不带权值,无向图带权值,无向图不带权值)

    这不马上要期末考试了,复习的时候突然发现了有好几种图的邻接矩阵需要画,在网上找了半天结果发现也没有特别详细的总结,所以经过总结写一下吧,希望对有需要的人,有点帮助吧!!!!(如有不对还请见谅!!!!!~~~~~~) 1,有向图带权值   2.有向图不带权值

    2024年02月13日
    浏览(50)
  • NOI / 1.9编程基础之顺序 09:直方图

    描述 给定一个非负整数数组,统计里面每一个数的出现次数。我们只统计到数组里最大的数。 假设 Fmax (Fmax 10000)是数组里最大的数,那么我们只统计 {0,1,2.....Fmax} 里每个数出现的次数。 输入 第一行n是数组的大小。1 = n = 10000。 紧接着一行是数组的n个元素。 输出 按顺序

    2024年02月09日
    浏览(77)
  • NOI Linux 2.0 CSP奥赛复赛环境安装使用指南

    以下是可能导致你在老版 NOI Linux 系统下形成的习惯在新版下翻车的改动。 移除了 GUIDE 从 32bit 变为了 64bit 系统,需要注意指针现在占 8 字节而不是 4 字节 更新了编译器版本 默认情况下右键没了【新建文件】的选项 桌面目录改为中文,可能会导致一些程序无法运行 系统基于

    2024年02月07日
    浏览(35)
  • 最大子矩阵(openjudge noi-2.6基本算法之动态规划-1768)

    来源 OpenJudge - 1768:最大子矩阵 题目描述 已知矩阵的大小定义为矩阵中所有元素的和。给定一个矩阵,你的任务是找到最大的非空(大小至少是1 * 1)子矩阵。 比如,如下4 * 4的矩阵  0        -2        -7        0  9         2        -6        2 -4      

    2024年04月26日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包