zoukankan      html  css  js  c++  java
  • AGC004解题报告

    在To do list上看到挂了一道F题,不知道为什么会挂在那边,所以就花了一个下午加一个晚上做了一下整套题。

    A是傻题,从B题开始讲。

    B

    $a[i]$最小的肯定是独立取的,从别的转化过来没什么收益,所以可以破环为链。

    枚举第二个操作进行了k次,那么每一个$a[i]$都可以从它前k个元素转移而来,直接取最小值即可(所以不破环也可以)

    C

    自己想了一个“从外向内包,中间开洞使联通”的方法,然后巨难写,特殊情况很多。

    其实有一种比较简单的构造方法:

    直接这样构造,所有的点一定都暴露在外,直接带上即可。

    D

    首先有一个显而易见的结论,不可能存在一个环,因为这样的话环上的点不可能同时到达。

    那么1肯定要是自环,剩下的所有点出度为1,且都可达1,那么反向建图就是一棵树。

    现在问题转化如下:一棵树上可以选择一些点把它整颗子树接到根节点,使得所有节点深度小于等于k

    那么就可以贪心了,尽量选高的点接在根节点上,即每次找到子树深度为k-1的节点接到根节点,然后将其删去。

    E

    转化题意:把所有机器人移动改为洞和边界移动。

    假设这个洞走到的极上下左右都已经确定,那么边界所清除的区间也已经确定了,洞在极上下左右这个矩形中也可以随意移动。

    所以我们就可以用$dp[l][r][d][u]$表示洞扩展这个矩形时最大答案,初始矩形是洞的起始点,转移的时候通过bfs可以保证转移顺序。

    注意空间要开$1e8$,而答案不超过10000,所以直接开short即可。

    F

    确实是一道神仙题。

    先考虑树的情况,发现操作有相邻染色,连续四个染色删掉中间两个,连续六个染色删掉中间四个。。

    其实都是奇偶染色,而染两个点的代价就是它们之间的距离。把奇偶点分别染为1和-1,然后在一个点的时候尽量合并1和-1,剩下的点一定要经过这个点的父亲边继续合并。

    那么直接模拟上述过程进行dp,如果1的dp值不为0就无解,否则最小值是所有点dp值的绝对值之和。

    然后是基环树,分奇环和偶环两种情况。

    如果是偶环,那么还是奇偶染色,我们先把环拉下去的树全都dp然后变成环上的dp值。

    如果环上相同奇偶性的dp和不为0,那么无解,最小情况我们用流来理解。

    (截自FlashHu的博客)

    然后取绝对值以后就是数轴上固定一些点求最小距离和,直接取中位数即可。

    现在讨论奇环。

    奇环会使得这不再是一个二分图,也不能再奇偶染色了。

    但是我们思考奇环的本质,先忽略一条边,以环上的一点为根直接进行树型dp,那条边的功能其实就是把根节点的dp值和被连点的dp值进行一种“不一样的交换”。

    即这两个点可以正的和正的抵消,负的和负的抵消,抵消之后这条边就消失了,就是一个单纯的树型dp。

    因为抵消以后根节点的dp值必须是0,所以可以确定抵消的值为$frac{dp[Rt]}{2}$,即把环上所有点的dp值减去$frac{dp[Rt]}{2}$(相当于环上所有边减掉$frac{dp[Rt]}{2}$,然后新加的那条边要走$frac{dp[Rt]}{2}$(dp贡献表示在根节点上))

  • 相关阅读:
    FileChannel的基本使用
    qq在线交流
    ci框架连接数据库
    绩效管理,如何实现“投资于人”?
    Asp.Net开发中传递的URL的长度问题
    ASP.NET程序中常用的三十三种代码
    认识ASP.NET配置文件Web.config
    JS实现图片幻灯片效果
    一些web开发中常用的、做成cs文件的js代码
    div自适应浏览器高度的问题
  • 原文地址:https://www.cnblogs.com/Forever-666/p/14028347.html
Copyright © 2011-2022 走看看