• Madoka and the Sixthgraders (全排列队列,每一个点可以向外连1条线题型+倍增法处理图上点转移+贪心+排序+map平衡二叉树)


    题意:

    Madoka 的教室里有 nn 个座位,一开始,编号为 ii 的座位上坐着编号为 b_i(1 \le b_i \le n)bi(1bin) 的同学。

    门外有排成一队的,编号从 n+1n+1 开始的,无穷多的同学。

    现在,每上一节课,坐在编号为 ii 的座位上的同学会移动到编号为 p_ipi 的座位上,所有座位的移动是同时瞬间完成的。

    如果一个座位上有多个人,则只有编号最小的同学可以留在座位上,其他同学会被开除出班级。每堂课至少开除一个同学。

    接着,外面的同学会依次进入教室,坐到空座位上。

    在若干节课后,第 ii 个座位上坐着的同学编号为 a_iai

    给出 a,pa,p,求字典序最小的可能的 bb。

    思路:

    • 全排列队列,每一个点可以向外连1条线题型: 建图
    • 可以得到一个 深林图, 每一个树有一个环,环外点的方向一定指向环. (当然也可以只是一个环 (每一个点都被其他一个点所指向))
    • 就是一个树 多了一个边而已. n个边
    • 这道题就是一个 树+环, 
    • 然后找规律,发现新进来的点一定会被其他点给挤出去(他的编号比其他点大), 每一次新点冲入度为0的点进去
    • 由此可以得到轮数
    • 轮数得到,就可以知道 最初的图上的点 经过n论后 会在图上的那个位置,  这里利用倍增法处理
    • 由此可知 现在图上 id <=n 的点 会和哪些位置的点进行比较,
    • 现在问题就转化成了, 将这些已知点和未知点 放在图上使得字典序最小,
    • 首先, 贪心得将已知点放在他所占据位置的下标最靠前的位置, 因为他 一定比这些位置上的点小,才符合题意
    • 接下来就是放未知点, 由小到大得放未知点, 放在能翻的位置的下标最靠前的, 先放完已知点,在放未知点是不好处理的
    • 于是 将所有的点 由大到小放, 已知点就如上所说, 未知点就放在之前已知点所带来的位置下标最小的位置, (因为他一定比之前的点大), 这里用map处理即可
  • 相关阅读:
    深入浅出Google Android这本书怎么样
    iPhone开发实战这本书怎么样
    POST数据提交,关于System.Web.HttpUtility.HtmlEncode与System.Web.HttpUtility.UrlEncode的区别
    强烈推荐领域驱动设计与模式实战
    重构HTML: 改善Web应用的设计这本书怎么样
    关于C#与VB.NET网络通信开发实战的读后感
    关于Flex 3权威指南的读后感
    关于iPhone游戏编程实例的读后感
    强烈推荐iPhone开发秘籍
    强烈推荐高效程序员的45个习惯:敏捷开发修炼之道
  • 原文地址:https://www.cnblogs.com/Lamboofhome/p/16818080.html
Copyright © 2020-2023  润新知