第十五届蓝桥杯省赛第二场C/C++B组C题【传送阵】题解(AC)

embedded/2024/12/22 19:49:45/

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

解题思路

由于 a a a 数组是一个 1 1 1 n n n 的一个排列,那么形成的一定是如下形式:

在这里插入图片描述
一定会构成几个点的循环,或者是几个单独的点。

从任意点开始,如果能进入一个循环,一定可以将整个循环的宝藏都拿走,因为不限进入传送门的次数。

那么,我们可以用并查集来维护点与点之间的关系,以及一个小团体里头点的数量。

由于我们可以使用一次从 j j j 跳到 j − 1 j - 1 j1 j + 1 j + 1 j+1 的位置,那么我们可以枚举所有的 c n t [ f i n d ( j ) ] + c n t [ f i n d ( j + 1 ) ] cnt[find(j)] + cnt[find(j + 1)] cnt[find(j)]+cnt[find(j+1)],其中 f i n d ( j ) ≠ f i n d ( j + 1 ) find(j) \neq find(j+1) find(j)=find(j+1)

时间复杂度约为 O ( n ) O(n) O(n)

#include <iostream>
#include <cstring>
#include <algorithm>
#include <cstdio>using namespace std;const int N = 1e6 + 10;int n;
int p[N], cnt[N];int find(int x)
{if (x != p[x])p[x] = find(p[x]);return p[x];
}int main()
{cin >> n;for (int i = 1; i <= n; ++ i )p[i] = i, cnt[i] = 1;for (int i = 1; i <= n; ++ i ){int x;cin >> x;int a = find(i), b = find(x);if (a == b)continue;cnt[a] += cnt[b];p[b] = a;}int res = 0;for (int i = 1; i < n; ++ i ){int a = find(i), b = find(i + 1);if (a == b)res = max(res, cnt[a]);elseres = max(res, cnt[a] + cnt[b]);}cout << res << endl;return 0;
}

【在线测评】

在这里插入图片描述


http://www.ppmy.cn/embedded/23462.html

相关文章

大象机器人开源六轴协作机械臂myCobot 320 手机摄影技术!

引言 有没有遇到过这样的情况&#xff1a;当你手持手机或相机准备拍摄视频时&#xff0c;心中已经构想了完美的画面&#xff0c;但却因为实际的限制无法捕捉到理想中的角度&#xff1f;这种情况可能会让人感到挫折。例如&#xff0c;如果想要从地面一只蚂蚁的视角拍摄&#xff…

2014NOIP普及组真题 4. 子矩阵

线上OJ&#xff1a; 一本通&#xff1a;http://ybt.ssoier.cn:8088/problem_show.php?pid1968 核心思想&#xff1a; 思考1 看到这样的题型&#xff0c;第一反应还是动态规划DP。但本题中又要选行又要选列&#xff0c;比以前只做列选择的题目多了一个行变量。 思考2 假设没…

python绘制三维散点图

在Python中&#xff0c;我们通常使用matplotlib库的mplot3d工具包来绘制三维散点图。以下是一个简单的示例&#xff1a; import numpy as np import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D # 创建一些随机数据 np.random.seed(0) x np.…

GESP一级 - 第二章 - 第3节 - 数据类型的转换

数据类型转换学习目录 1. 数据类型转换的概念 1.1 什么是数据类型转换 数据类型转换是指将一种数据类型的值转换为另一种数据类型的值的过程。在C编程中,有时我们需要将数据从一种类型转换为另一种类型,以满足不同的需求。 示例1: 将整数转换为浮点数 int num1 10; double …

mpv编译播放器无视频输出

编译了几天终于编译好了&#xff0c;但发现没有视频输出&#xff0c;只有声音 百度后发现 mpv -vohelp命令查询当前识别驱动 Available video outputs: gpu Shader-based GPU Renderer gpu-next Video output based on libplacebo libmpv …

selenium中元素定位正确但是操作失败,6种解决办法全搞定

selenium中元素定位正确但是操作失败的原因无外乎以下4种&#xff1a; 一、页面没加载好解决方法&#xff1a;添加等待方法&#xff0c;如&#xff1a;time.sleep() 二、页面提交需要等待给数据后台解决方法&#xff1a;添加等待方法&#xff0c;如&#xff1a;time.sleep() …

服务器开放端口:操作细节与安全性考量

在服务器管理中&#xff0c;开放端口是常见的操作&#xff0c;用于允许外部设备或网络访问服务器上的特定服务。然而&#xff0c;这一操作也带来了安全风险&#xff0c;因为不当的端口管理可能导致未授权访问或数据泄露。因此&#xff0c;在进行端口开放时&#xff0c;必须仔细…

基于深度学习的实时人脸检测与情绪分类

情绪分类 实时人脸检测与情绪分类 Kaggle Competion 数据集 fer2013 中的测试准确率为 66%CK数据集的检验准确率为99.87%情绪分类器模型预测从网络摄像头捕获的实时视频中的平均成本时间为 4~ 10ms 关键技术要点&#xff1a; 实时人脸检测&#xff1a;系统采用了前沿的人脸检…