藍橋杯真題——傳送陣

?

原題連接:藍橋杯2024年第十五屆省賽真題-傳送陣 - C語言網

知識點:并查集?

題目描述

小藍在環球旅行時來到了一座古代遺跡,里面并排放置了 n 個傳送陣,進入第 i 個傳送陣會被傳送到第 ai 個傳送陣前,并且可以隨時選擇退出或者繼續進入當前傳送陣。小藍為了探尋傳送陣中的寶物,需要選擇一個傳送陣進入,然后連續進入之后的傳送陣。小藍希望盡可能多地進入傳送門以便搜索寶物,同時他可以使用一次魔法,從某個傳送陣 j 走到相鄰的(第 j ? 1 或第 j + 1 個)傳送陣,請問小藍最多能到達多少個不同的傳送陣?一個傳送陣可多次進入,但在計算答案時只算一個。

輸入格式

輸入的第一行包含一個正整數 n 。第二行包含 n 個正整數 a1, a2, · · · , an ,相鄰整數之間使用一個空格分隔。

輸出格式

輸出一行包含一個整數表示答案。

樣例輸入

5
2 1 5 4 3

樣例輸出

4

提示

【樣例說明】

小藍的路徑可以是:1 → 2 → 3 → 5 。其中 2 → 3 使用魔法。

【評測用例規模與約定】

對于 20% 的評測用例,1 ≤ n ≤ 1000 ;對于所有評測用例,1 ≤ n ≤ 106,且 a 是 1 至 n 的一個排列。

詳解:第十五屆藍橋杯省賽第二場C/C++B組C題【傳送陣】題解_藍橋杯2024年第十五屆省賽真題-傳送陣-CSDN博客

思路:?

?所有的傳送陣是以一個環的形式存在

所有點出度都為1,即只能從這個點出發到達另外一個點
一個排列中ai出現的次數就是其入度
即最后一定是成一個環
即可構成n個有向連通圖,且每個連通圖都是一個環

先跑完一個環,再枚舉所有使用魔法的結果

如何快速算出每個節點的節點數:并查集

主要步驟:

使用cnt[far[i]]來存放每個環內的節點個數
當使用魔法從x跳到y時,分別找到其祖先節點,判斷其祖先節點是否相等,
若相等,即在同一個環中,不用再進行相加操作
若不同,可令far[x]=y,cnt[y]+=cnt[x],實現兩個環節點數相加(將x加到y)?

代碼:

//#include<bits/stdc++.h>
#include<iostream>
#include<algorithm>
#include<cstring> 
#define int long long
using namespace std;const int N=1000000+10;int n;
int a[N];
int fa[N],cnt[N];//父節點,每個環的結點個數 
int ans;void init()//并查集初始化 
{for(int i=1;i<=n;i++){fa[i]=i;cnt[i]=1;}
}
int findf(int x)
{if(fa[x]!=x)fa[x]=findf(fa[x]);return fa[x];
}
void union_(int x,int y)
{x=findf(x);y=findf(y);//找出父節點if(x!=y){fa[x]=y;cnt[y]+=cnt[x];}
}
signed main()
{ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);cin>>n;init();//初始化 for(int i=1;i<=n;i++){cin>>a[i];//由題意可知i與a[i]具有環的關系,將兩點相連,即指向同一父節點 union_(i,a[i]);//將能連接的節點相連,即造出m個環 }//已經通過union_函數將i與a[i]鏈接,在后面的操作中不再考慮位置問題 for(int i=1;i<n;i++)//使用魔法,即遍歷i和i+1的點{ans=max(ans,cnt[findf(i)]);//不使用魔法時的節點數 if(findf(i)!=findf(i+1))//不同的環 ans=max(ans,cnt[findf(i)]+cnt[findf(i+1)]);} cout<<ans<<endl;return 0;} 

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/75537.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/75537.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/75537.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

彩虹表攻擊

1. 引言 密碼安全一直是信息安全領域的重要課題。攻擊者可以利用**暴力破解(Brute-Force Attack)和字典攻擊(Dictionary Attack)等方式嘗試破解密碼。然而,計算機性能的提升使得這些方法的效率不斷提高,其中彩虹表攻擊(Rainbow Table Attack)**是一種極具威脅性的密碼…

Vue2 監聽器 watcher

文章目錄 前言監聽器的作用&#xff1a;工作流程&#xff1a;基本用法1. 簡單監聽2. 對象形式配置 使用場景1. 執行異步操作2. 監聽路由變化3. 復雜對象/數組變化 關鍵配置項與計算屬性的區別動態添加監聽器注意事項 前言 提示&#xff1a;這里可以添加本文要記錄的大概內容&a…

Linux系統程序設計:從入門到高級Day02

這一篇 我帶大家復習一下&#xff0c;C語言中的文件 那一部分 大家注意 這里的圖并非原創 是當時我老師的圖片 本片作用主要是 后續會有文件相關操作&#xff0c;這篇幫大家復習C語言文件中的內容 有助于大家后面的理解。 文章中代碼大多是圖片格式&#xff0c;是因為這是我…

N元語言模型的時間和空間復雜度計算

對于N元語言模型&#xff0c;時間復雜度是O(V ^ {N-1})&#xff0c;空間復雜度是O(V ^ {N})&#xff0c;N是詞匯表的大小。 空間復雜度&#xff1a;存儲所有可能的N-1元組及其對應的詞的頻次需要大量的存儲空間。例如&#xff0c;對于一個三元模型&#xff08;N3&#xff09;&…

Tmux 核心操作速查指南

Tmux 最常用操作筆記 1. 基本概念 會話&#xff08;Session&#xff09;&#xff1a;一個tmux會話可以包含多個窗口&#xff0c;適合長期任務管理。窗口&#xff08;Window&#xff09;&#xff1a;每個窗口是一個獨立的終端界面&#xff0c;可包含多個面板。面板&#xff08…

哈希表系列一>兩數之和

目錄 題目&#xff1a;方法&#xff1a;暴力代碼&#xff1a;優化后代碼&#xff1a; 題目&#xff1a; 鏈接: link 方法&#xff1a; 暴力代碼&#xff1a; public int[] twoSum(int[] nums, int target) {解法一&#xff1a;暴力解法&#xff1a;int n nums.length;for(int…

端到端機器學習流水線(MLflow跟蹤實驗)

目錄 端到端機器學習流水線(MLflow跟蹤實驗)1. 引言2. 項目背景與意義2.1 端到端機器學習流水線的重要性2.2 MLflow的作用2.3 工業級數據處理需求3. 數據集生成與介紹3.1 數據集構成3.2 數據生成方法4. 機器學習流水線與MLflow跟蹤4.1 端到端機器學習流水線4.2 MLflow跟蹤實驗…

英語學習:讀科技論文的難處

如果讀起科技論文&#xff0c; 我們就知道自己到底欠缺什么知識了&#xff0c; 那是一個挨著一個的缺。 而且還沒有維基百科可用。 怎么辦&#xff1f;沒辦法&#xff01;硬看&#xff01; 而且還要面臨語言的差異性困難。比如這一句怎么翻譯比較合適&#xff1f;還是直接不翻譯…

001 使用單片機實現的邏輯分析儀——吸收篇

本內容記錄于韋東山老師的畢設級開源學習項目&#xff0c;含個人觀點&#xff0c;請理性閱讀。 個人筆記&#xff0c;沒有套路&#xff0c;一步到位&#xff0c;歡迎交流&#xff01; 00單片機的邏輯分析儀與商業版FPGA的邏輯分析儀異同 對比維度自制STM32邏輯分析儀商業版邏…

基數排序算法解析與TypeScript實現

基數排序&#xff08;Radix Sort&#xff09;是一種高效的非比較型整數排序算法&#xff0c;通過逐位分配與收集的方式實現排序。本文將深入解析其工作原理&#xff0c;并給出完整的TypeScript實現。 一、算法原理 1. 核心思想 多關鍵字排序&#xff1a;將整數按位數切割成不同…

最新全開源碼支付系統,贈送3套模板

最新全開源碼支付系統&#xff0c;贈送3套模板 碼支付是專為個人站長打造的聚合免簽系統&#xff0c;擁有卓越的性能和豐富的功能。它采用全新輕量化的界面UI 讓您能更方便快捷地解決知識付費和運營贊助的難題&#xff0c;同時提供實時監控和管理功能&#xff0c;讓您隨時隨地…

PHP基礎二【變量/輸出/數據類型/常量/字符串/運算符】

PHP基礎二 1. PHP變量2. PHP輸出3. 數據類型3.1 字符串3.2 整型3.3 浮點型3.4 布爾型3.5 數組3.6 對象3.7 NULL3.8 資源類型3.9 類型比較 4. 常量5. 運算符 1. PHP變量 1. 我們來看一個實例&#xff1a; <?php$x 5;$y 6;$z $x $y;echo $z; // echo 是輸出&#xff0c;…

ue5 仿鬼泣5魂類游戲角色和敵人沒有碰撞

UE5系列文章目錄 文章目錄 UE5系列文章目錄前言一、問題原因二、設置碰撞2.讀入數據 總結 前言 ue5 仿鬼泣5魂類游戲角色和敵人沒有碰撞 一、問題原因 在UE5中&#xff0c;角色和敵人沒有碰撞可能是由多種原因導致的&#xff0c;以下是一些可能的原因及解決方法&#xff1a…

《AdaBoost:從弱分類器到強模型的進化之路》

目錄 1. AdaBoost 的核心思想 2. AdaBoost 的關鍵步驟 步驟 1&#xff1a;初始化樣本權重 步驟 2&#xff1a;迭代訓練弱分類器 步驟 3&#xff1a;組合弱分類器 3. 用例子詳解 AdaBoost 數據集&#xff1a; 迭代過程&#xff1a; 第1輪&#xff08;t1&#xff09;&am…

Android Settings 有線網設置界面優化

Android Settings 有線網設置界面優化 文章目錄 Android Settings 有線網設置界面優化一、前言二、簡單修改1、修改的EthernetSettings代碼&#xff1a;2、有線網ip獲取代碼&#xff1a;3、AndroidManifest.xml定義有線網的Activity4、修改后界面&#xff1a; 三、其他1、有線網…

基于web的生產過程執行管理系統(源碼+lw+部署文檔+講解),源碼可白嫖!

摘要 隨著世界經濟信息化、全球化的到來和電子商務的飛速發展&#xff0c;推動了很多行業的改革。若想達到安全&#xff0c;快捷的目的&#xff0c;就需要擁有信息化的組織和管理模式&#xff0c;建立一套合理、暢通、高效的線上管理系統。當前的生產過程執行管理存在管理效率…

XSS 攻擊風險與防御實踐

? 框架與 XSS 防護概況 框架是否默認轉義高危場景建議防御措施React? 是使用 dangerouslySetInnerHTML避免使用&#xff0c;必要時做內容清洗Vue.js? 是使用 v-html避免使用&#xff0c;或使用 DOMPurify 清洗Angular? 是使用 innerHTML、bypassSecurityTrustHtml謹慎繞過…

Cesium 時間線 及 坐標轉換

文章目錄 Cesium 基礎理解&#xff08;二&#xff09;TimeLine & Clock 應用場景核心代碼實例及解釋代碼解釋 Cesium 之 實體動畫構建實體動畫的技巧1. 利用時間屬性2. 組合動畫效果3. 使用動畫曲線 優化點1. 減少屬性更新頻率2. 優化實體數量3. 合理使用材質和紋理 注意事…

ngx_regex_init

定義在 src\core\ngx_regex.c void ngx_regex_init(void) { #if !(NGX_PCRE2)pcre_malloc ngx_regex_malloc;pcre_free ngx_regex_free; #endif } NGX_PCRE21 #if !(NGX_PCRE2) 就為假 條件不成立 ngx_regex_init 函數就成了空實現 NGX_PCRE2 被定義&#xff0c;則表示 Ngin…

第二期:深入理解 Spring Web MVC [特殊字符](核心注解 + 進階開發)

前言&#xff1a; 歡迎來到 Spring Web MVC 深入學習 的第二期&#xff01;在第一期中&#xff0c;我們介紹了 Spring Web MVC 的基礎知識&#xff0c;學習了如何 搭建開發環境、配置 Spring MVC、編寫第一個應用&#xff0c;并初步了解了 控制器、視圖解析、請求處理流程 等核…