HT-014 Div3 跳棋 题解 [ 黄 ] [ 并查集 ] [ 链表 ]
分析
依旧是一个连通块题。
观察题面不难发现两个重要性质:
- 一个跳棋只能以它旁边的两个跳棋为中点跳跃,且满足跳跃路线中 除中点以外没有其它跳棋阻挡。
- 只有我们的跳棋可以移动。
- 跳棋的操作具有可逆性/对称性。
第三条性质可以这么理解,就是一个跳棋跳过去之后,它还可以跳回来。
因此,无论我们从左右两边的哪一边开始起跳,都可以跳出最佳路径。
于是我们规定跳棋只能向右跳。(你规定向左跳也可以)
然后发现,跳棋跳的路线,是可以抽象成一条链的。
每次从 \(u\) 点跳向 \(v\) 点,可以看作两者连一条边。
这样链就建好了。
但这样仍然会超时,因为每次我们从链的某个节点进入,走到最后进行查询操作,每个格子进行一遍,就相当于是 \(O(n^2)\) 的复杂度了。
并且还有一个性质,就是我们只注重跳到的最后的结果,而链表又相当于是一种特殊的树。
所以我们想到既可以实现 \(O(1)\) 快速查询,又可以维护儿子与祖先关系的并查集。
简化树的操作,便是路径压缩。
由于是连通块,所以使用 BFS 看似也可以实现,但我没试过,并且感觉有点难写。或者写遍历树的做法也可以,稍微比 BFS 好写些。实现的好那么上面三种做法都没问题。
时间为 \(O(n)\) 。
代码
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int n,m,f[200005],l[200005],r[200005],jp[200005],fr[200005],ans=0;
bool blk[200005];
void init()
{
for(int i=0;i<200005;i++)
{
f[i]=i;
l[i]=i;
r[i]=i;
}
}
int findf(int x)
{
if(f[x]!=x)f[x]=findf(f[x]);
return f[x];
}
void combine(int x,int y)
{
int fx=findf(x),fy=findf(y);
f[fx]=fy;
l[fy]=min(l[fy],l[fx]);
r[fy]=max(r[fy],r[fx]);
}
int main()
{
freopen("jump.in","r",stdin);
freopen("jump.out","w",stdout);
cin>>n>>m;
init();
for(int i=1;i<=m;i++)
{
int a;
cin>>a;
blk[a]=1;
}
for(int i=1;i<=n;i++)
{
fr[i]=fr[i-1];
fr[i]+=blk[i];
}
for(int i=n,b=0x3f3f3f3f;i>=1;i--)
{
if(blk[i])
{
jp[i]=0x3f3f3f3f;
b=i;
continue;
}
jp[i]=b;
}
for(int i=1;i<=n;i++)
{
if(jp[i]>=0x3f3f3f3f)continue;
int p=2*jp[i]-i;
if(p>i&&p<=n&&(fr[p]-fr[i-1])==1)combine(i,p);
}
for(int i=1;i<=n;i++)
{
int fi=findf(i);
ans=max(ans,abs(r[fi]-l[fi]));
}
cout<<ans;
return 0;
}
HT-014 Div3 跳棋 题解 [ 黄 ] [ 并查集 ] [ 链表 ]的更多相关文章
- Codeforces #541 (Div2) - F. Asya And Kittens(并查集+链表)
Problem Codeforces #541 (Div2) - F. Asya And Kittens Time Limit: 2000 mSec Problem Description Inp ...
- 【HNOI2012】永无乡 题解(并查集+线段树合并)
题目链接 给定一张含$n$个点$m$条边的无向图,每个点有一个重要指数$a_i$.有两种操作:1.在$x$和$y$之间连一条边:2.求$x$所在连通块中重要程度第$k$小的点. ----------- ...
- 【CF878C】Tournament set+并查集+链表
[CF878C]Tournament 题意:有k个项目,n个运动员,第i个运动员的第j个项目的能力值为aij.一场比赛可以通过如下方式进行: 每次选出2个人和一个项目,该项目能力值高者获胜,败者被淘汰 ...
- CodeForces 566D Restructuring Company (并查集+链表)
题意:给定 3 种操作, 第一种 1 u v 把 u 和 v 合并 第二种 2 l r 把 l - r 这一段区间合并 第三种 3 u v 判断 u 和 v 是不是在同一集合中. 析:很容易知道是用并 ...
- luoguP1525 关押罪犯 题解(NOIP2010)(并查集反集)
P1525 关押罪犯 题目 #include<iostream> #include<cstdlib> #include<cstdio> #include<c ...
- 100: cf 878C set+并查集+链表
$des$Berland要举行 $n$ 次锦标赛,第一次只有一个人,之后每一次会新加入一个人.锦标赛中有 $k$ 种运动项目,每个人在这 $k$ 种项目上都有一个能力值,每次会选择任意两个还未被淘汰的 ...
- CF469D Two Set (并查集)
Codeforces Round #268 (Div. 2)D Codeforces Round #268 (Div. 1)B CF468B D. Two Sets time limit per te ...
- CF455C Civilization (并查集)
CF456E Codeforces Round #260 (Div. 1) C Codeforces Round #260 (Div. 2) E http://codeforces.com/conte ...
- Educational Codeforces Round 7 C. Not Equal on a Segment 并查集
C. Not Equal on a Segment 题目连接: http://www.codeforces.com/contest/622/problem/C Description You are ...
- Codeforces Round #260 (Div. 1) C. Civilization 并查集,直径
C. Civilization Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/455/probl ...
随机推荐
- 定时任务监控服务Healthchecks
GitHub地址:https://github.com/healthchecks/healthchecks 官方文档:https://healthchecks.io/docs/ 按照步骤进行安装: 1 ...
- CAD快速图层孤立、隐藏、锁定下载
AutoCAD快速图层孤立.隐藏.锁定插件下载 链接 AutoCAD Quick Layer Isolation, Hide, Lock Plugin Download Link MAG.fas&am ...
- This request has been blocked; the content must be served over HTTPS.此请求已被阻止;内容必须通过HTTPS提供
近期在做将高德地图替换为天地图时遇到了这个问题,原因是https由于安全协议禁止了http的请求 http://api.tianditu.gov.cn/api?v=4.0&tk=XXXXXXX ...
- Simple FOC内置通信接口学习(一):实时监控电机状态
本文参(zhao)考(chao)至官方文档https://docs.simplefoc.com/docs_chinese/monitoring 引言 在使用Simple FOC控制电机的过程中,尤其是 ...
- Python中构建全局字典的详细指南
在Python编程中,全局变量是指在整个程序运行期间都可以访问的变量.全局字典作为一种特殊的全局变量,可以存储各种类型的数据,包括字符串.数字.列表.元组等,这使得它在数据管理和跨模块通信方面非常有用 ...
- 【C#】根据分数求出相应的成绩等级
设计窗体程序,使用文本框控件输入百分制成绩,实现将学生的百分制成绩转换为对应的等级成绩(优.良.中.及格.不及格). 要求:必须使用异常处理技术,优先使用switch-case的方式 点击查看代码 | ...
- Qt通用方法及类库3
函数名 //设置全局样式 static void setStyle(QUIWidget::Style style); static void setStyle(const QString &q ...
- Qt编写地图综合应用21-路径规划
一.前言 近期重新将这个地图综合应用进行大幅度的改进更新升级,包括使用示例也做了非常多的改进和调整,其中就包括路径规划功能,之前只是调用了百度地图的JS交互接口,根据起始点坐标经纬度和结束点坐标经纬度 ...
- 祝大家这周圣诞快乐!!本周进军多模态!😀From LLMs to MLLMs:😜Exploring the Landscape of Multimodal Jailbreaking
从LLMs到MLLMs:探索多模态越狱攻击的前景 禁止盗用,侵权必究!!!欢迎大家积极举报 ①脆弱性代表:越狱攻击(恶意指令/训练&解码干预). ②最近的越狱攻击: 整体说:构建越来越复杂场景 ...
- [转]E1接口介绍
E1 通道本来设计用来传输电话的,每个 E1(带宽 2.048M)可以传 30 路电话,后来扩大的应用范围,可以用作传网络,串口等不同的业务:E1 是一个基本的传输单元,其最终还是通过光纤来传输的,如 ...