zoukankan      html  css  js  c++  java
  • CSPS模拟 62

      婚礼现场系列

      

      T1 $gragh$

        为了方便把边的贡献下放到点,跑一个生成树作为划分依据。

      T2 $permutation$

        由于在本题中,构造的变换方法保证只能邻项交换

        所以如果位置串字典序变小,权值串字典序也必然变小

        但是此结论不适合所有情况。

        考虑将读入的权值串转化成位置串

        题目变成了:邻项且权值之差绝对值大于k可以交换,求最后字典序最小串。

        一些情况下由于绝对值的限制,串中的两个数永远不能交换,这样的数有好多对。

        考虑拓扑+建边优化,只向离这个点后边且离它最近的 不能交换的点 建边,表示这两个点的相对位置永远不能交换(也就是目前这个点表示的位置上的权值永远小于被指向的点)

        最后堆优化拓扑排序,贪心给小权值分配小位置,得到的就是答案。

        有点绕。

      T3 $tree$

        年度最滑稽题

        考虑把边排序,从大到小插入边

        那么插入这条边后,它连接的两个点显然必须在排列中相邻

        如果不相邻的话那就会经过一些权值更小的边,本次贡献必然变小

        但是它们相邻的话,由于到下一个点必然经过比这条权值更小的边,之后的贡献不会变小

        然后两个点由于相邻了,就可以视作一个点(闭包?)了

        

        通俗地说,就是在较大边权的边形成的联通块里你可以乱走,反正最小值一定在跨出去的最后一步上取,从最大权边贪心取最大值,答案就等于边权的和

        又因为树联通所有的边都是必经边,所有边权和这个答案显然无法更优了

        于是把读进来的边权加在一起,输出出去。

  • 相关阅读:
    [055] SSL 3.0曝出Poodle漏洞的解决方式-----开发人员篇
    java中接口的定义与实现
    很好的理解遗传算法的样例
    Memory Architecture-SGA-Database Buffer Cache
    ActionScript3游戏中的图像编程(连载十七)
    MacOS的g++使用clang,默认不支持C++11多线程: no matching constructor for initialization of 'std::thread'
    bash代码
    delete
    nautilus-open-terminal右键随处打开终端
    删除系统多余内核
  • 原文地址:https://www.cnblogs.com/yxsplayxs/p/11628552.html
Copyright © 2011-2022 走看看