【JZOJ1826】银河英雄传说

news/2024/11/14 23:57:36/

description

    公元五八○一年,地球居民迁移至金牛座α第二行星,在那里发表银河联邦创立宣言,同年改元为宇宙历元年,并开始向银河系深处拓展。宇宙历七九九年,银河系的两大军事集团在巴米利恩星域爆发战争。泰山压顶集团派宇宙舰队司令莱因哈特率领十万余艘战舰出征,气吞山河集团点名将杨威利组织麾下三万艘战舰迎敌。杨威利擅长排兵布阵,巧妙运用各种战术屡次以少胜多,难免恣生骄气。在这次决战中,他将巴米利恩星域战场划分成30000列,每列依次编号为1, 2, …, 30000。之后,他把自己的战舰也依次编号为1, 2, …, 30000,让第i号战舰处于第i列(i = 1, 2, …, 30000),形成“一字长蛇阵”,诱敌深入。这是初始阵形。当进犯之敌到达时,杨威利会多次发布合并指令,将大部分战舰集中在某几列上,实施密集攻击。合并指令为M i j,含义为让第i号战舰所在的整个战舰队列,作为一个整体(头在前尾在后)接至第j号战舰所在的战舰队列的尾部。显然战舰队列是由处于同一列的一个或多个战舰组成的。合并指令的执行结果会使队列增大。然而,老谋深算的莱因哈特早已在战略上取得了主动。在交战中,他可以通过庞大的情报网络随时监听杨威利的舰队调动指令。在杨威利发布指令调动舰队的同时,莱因哈特为了及时了解当前杨威利的战舰分布情况,也会发出一些询问指令:C i j。该指令意思是,【询问电脑,杨威利的第i号战舰与第j号战舰当前是否在同一列中,如果在同一列中,那么它们之间布置有多少战舰。】作为一个资深的高级程序设计员,你被要求编写程序分析杨威利的指令,以及回答莱因哈特的询问。最终的决战已经展开,银河的历史又翻过了一页……

analysis

  • 经典NOI题目,正解是并查集

  • 和普通并查集不同的是,我们还要记录两个东西:

  • bi是每一个点的深度,ci是每一个点在当前集合里的深度

  • 每次更改father时,把深度也调整一下

  • 然后就容易知道答案了


code

varfather,b,c:array[0..30000]of longint;n,i,j,x,y:longint;ch:char;
function getfather(x:longint):longint;
beginif father[x]=x then exit(x);getfather:=getfather(father[x]);//注意这个地方不可以直接写成father[x]=getfather(x),而要放在后面b[x]:=b[x]+b[father[x]]-1;// 原因很简单,因为这个点的深度是父节点的深度+1father[x]:=getfather;//如果先路径压缩再计算深度,那么当前点的深度会变成深度为1的祖先+1=2,答案就会错误
end;
procedure union(x,y:longint);
vari,j:longint;
begini:=getfather(x);j:=getfather(y);if i<>j thenbeginfather[i]:=j;b[i]:=b[i]+c[j];c[j]:=c[i]+c[j];end;
end;
function solve(x,y:longint):longint;
beginif getfather(x)=getfather(y)then exit(abs(b[x]-b[y])-1);exit(-1);
end;
beginreadln(n);for i:=1 to 30000 dobeginfather[i]:=i;b[i]:=1;c[i]:=1;end;for i:=1 to n dobeginreadln(ch,x,y);if ch='M' then union(x,y)else writeln(solve(x,y));end;
end.

http://www.ppmy.cn/news/404282.html

相关文章

猎人与猎狗的故事

猎人与猎狗&#xff0c;看似永恒的主仆&#xff0c;但事事无绝对。一个小故事献给大家&#xff0c;故事虽小&#xff0c;含义颇丰&#xff0c;请各位看官慢慢看&#xff0c;细细读&#xff0c;用心品&#xff0c;绝对不会浪费大家的时间。既可以看好看的故事又可以在故事中受到…

【ACWing】238. 银河英雄传说

题目地址&#xff1a; https://www.acwing.com/problem/content/240/ 有一个划分为 N N N列的星际战场&#xff0c;各列依次编号为 1 , 2 , … , N 1,2,…,N 1,2,…,N。有 N N N艘战舰&#xff0c;也依次编号为 1 , 2 , … , N 1,2,…,N 1,2,…,N&#xff0c;其中第 i i i号战…

六边形战士

代码 效果如下

猎人、猎狗和公司

西方企业制度和经济制度的由来 至理名言&#xff1a; 干活的总是拿得少的&#xff0c;拿得多的都是不干活的——《人力资源管理》&#xff08;批注&#xff1a;此话全有道理吗&#xff1f;不是&#xff01;&#xff09; 也许有人看过&#xff0c;但没关系&#xff0c;的确有意思…

盘点五种最常见加密算法!

大家好&#xff0c;我是Martin。 今天&#xff0c;就给大家来盘点一下最常见的5种加密算法。 大家平时的工作中&#xff0c;可能也在很多地方用到了加密、解密&#xff0c;比如&#xff1a; 用户的密码不能明文存储&#xff0c;要存储加密后的密文 用户的银行卡号、身份证号…

Unreal 5 实现丧尸追逐攻击功能

要实现让丧尸能够智能的追逐玩家&#xff0c;我们需要用到ue封装的ai行为树来实现。基础相关的请查看&#xff1a;Unreal Engine 5.1 AI行为树基础入门&#xff0c;来学习一下如何使用ai行为树来实现一个简单的追逐功能。这一篇就是基于这个基础上进行了优化&#xff0c;实现了…

Modbus协议基于modscan 的设备数据收发过程模拟

Modbus协议基于modscan 的设备数据收发过程模拟 一、基本介绍二、工具使用说明2.1 Modsim32的使用 - 模拟从设备 - 生成设备数据2.1.1 新建虚拟设备 - modsim文件2.1.2 打开虚拟设备 - modsim文件2.1.3 连接设置2.1.3.1 modbus /tcp连接2.1.3.2 COM连接 2.1.4 配置 - 设置数据自…

不会点爬虫技术写代码真没意思,Java 爬虫利器 Jsoup 详解

Jsoup的概述 Jsoup是一款Java语言开发的HTML解析器&#xff0c;用于解析HTML文档以及对HTML文档进行操作&#xff0c;处理等。它提供了类似于jQuery的DOM操作方法&#xff0c;以及用于HTML元素遍历、迭代、查询以及修改等操作的API&#xff0c;同时还支持CSS选择器和正则表达式…