首页 > 其他分享 >LOJ2818 循环排序

LOJ2818 循环排序

时间:2024-11-21 20:39:42浏览次数:1  
标签:cnt le 下标 LOJ2818 位置 循环 虚点 排序 欧拉

题目传送门

首先考虑排列怎么做,排序时显然是可以将1移到下标为1的位置,然后把下标为1的位置移到它所应到的位置……直到点应到的位置为1原来的位置,就可以操作一次,使得这些点都归位。

于是建图 \(G = \langle V, E \rangle, V = \{i\ |\ 1 \le i \le n \}, E = \{(i, a_i)\ |\ 1 \le i \le n\}\)。由于 \(a\) 是一个排列,那么 \(G\) 就构成若干环。设 \(G\) 中有 \(k\) 个环,第 \(i\) 个环有 \(l_i\) 的点,分别为 \(p_{i, 1}, p_{i, 2}, \cdots, p_{i, l_i}\)。如果对一个环的所有点按顺序操作一次,每个点就都能在应在的位置。如果对某些环中任意一点进行轮换,可以合并这些环。

发现下标数量和操作次数就只与提前合并的环数有关。设其为 \(m\),则操作次数为 \(cnt_2 - m + 2\),下标数量为 \(cnt_1 + m\)。其中 \(cnt_1, cnt_2\) 分别为点数与环数。特别的,当 \(m = 1\) 时需要特判,此时不需要提前合并了,次数和下标都减1。这里都是很简单的。

好,考虑扩展到可重序列。观察上面排列能做的原因——每个点都有唯一对应位置,而可重序列就是在一段区间内的。那么可以对每个权值建一个虚点,让所有不在区间内的点连向虚点,虚点连向区间内未匹配的点。那么如果要使序列有序,即每条边都需要遍历,即欧拉回路。

那么处理出来这些欧拉回路后,把欧拉回路当作环即可。正确性显然。

标签:cnt,le,下标,LOJ2818,位置,循环,虚点,排序,欧拉
From: https://www.cnblogs.com/shengxuanyi/p/18561508

相关文章

  • 1025 PAT Ranking(模拟、排序)
     方法一:先对总榜按要求进行排序,再遍历总榜时持续维护绝对排名和相对排名并输出即可 方法二:结构体中包含本地排名,在每输入一个测试点的数据以后就进行局部排序,得到本地排名,再将局部信息push到总榜中,再对总榜进行排序,直接输出即可。方法一需要多开三个数组来维护本地排名信息,空......
  • 排序算法(选择排序、直接插入排序、冒泡排序、二路归并排序)(C语言版)
    对数组进行排序,主要演示选择排序、直接排序、冒泡排序、二路归并排序算法,附上代码演示一、编写好各类排序方法的函数(1)s_sort(inte[],intn):选择排序。(2)si_sort(inte[],intn):直接插人排序。(3)sb_sort(inte[],intn):冒泡排序。(4)merge(inte[],intn);二路归并排序......
  • C语言分支与循环
    引言C语言是结构化的程序设计语言。结构化的程序通常包括数据的描述和操作的描述两方面的内容,结构指的是顺序结构、选择结构、循环结构。算法广义上来讲,算法是解决某一问题的方法和步骤,狭义的算法是对特定问题求解步骤的一种描述。算法的特性和要素:算法的特性有穷性确定......
  • 面试题精选04-使用Linq怎么将数据分组之后按时间排序取最新1条数据
    实体类publicclassMovie{publicstringName{get;set;}publicstringArea{get;set;}publicDateTimeProductTime{get;set;}}初始化数据publicstaticList<Movie>InitData(){List<Movie>data=newList<Movie>()......
  • RNN (循环神经网络 - 从mlp到rnn - 困惑度 - 梯度剪裁) + 代码实现 —— 笔记3.4《动
    0.前言课程全部代码(pytorch版)已上传到附件本章节为原书第8章(循环神经网络),共分为7节,本篇是第4-6节:RNNRNN从零实现RNN简洁实现本节(4-6节)的代码位置为:chapter_recurrent-neural-networks/rnn.ipynbchapter_recurrent-neural-networks/rnn-scratch.ipynbchapte......
  • es分页,pageNum从0开始和es排序代码demo
    es分页,pageNum从0开始和es排序代码demo如果从1开始,每页150条记录,可能查询不到结果。排查下来是初始的第一页的参数错误。参数从0开始计算,es搜素,需要注意起始页。否则查询结果为空。//es分页,pageNum从0开始。protectedvoidpage(OrderVOreqVO,SearchSourceBuildersear......
  • 简单的排序问题
    问题描述  计算机程序设计能力考试(ProgrammingAbilityTest,简称PAT)旨在通过统一组织的在线考试及自动评测方法客观地评判考生的算法设计与程序设计实现能力,科学的评价计算机程序设计人才,为企业选拔人才提供参考标准。每次考试会在若干个不同的考点同时举行,每个考点用局......
  • Windows右键新建列表排序
    前言全局说明Windows右键新建列表排序一、说明环境:Windows11家庭版23H222631.3737二、Windows11右键新建列表排序2.1打开注册表项HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Discardable\PostSetup\ShellNew2.2编辑Classes键......
  • PHP二维数组排序算法函数
    以使用PHP内置的array_multisort()函数来对二维数组进行排序。array_multisort()函数可以对多个数组或多维数组的一个或多个列进行排序。下面是一个示例函数,该函数可以对二维数组按指定列进行排序:<?phpfunctionsort2DArrayByColumn(&$array,$columnKey,$sortOrder=SORT_......
  • Python_字典的循环遍历
     1.遍历字典的key     dict={'name':'tom','age':20,'gender':'男'}forkindict.keys():print(k)  执行结果是2.遍历字典的valuedict={'name':'tom','age':20,'gender':......