zoukankan      html  css  js  c++  java
  • AGC004 部分简要题解

    E

    首先问题可以转化为:每次将出口带着边界走,出了边界的机器人立马消失,最大化出口碰到的机器人数量。

    考虑哪些机器人是已经出界了的,不难有观察:

    • 当前出界的机器人只与当前出口往四个方向走过的最远距离有关。

    下面令往上下左右分别 至多 走了 (u, d, l, r) 步,那么当前已经出界的机器人如下图所示(红色部分):

    于是自然的想法是令 (f_{u, d, l, r}) 表示当前机器人往上下左右至多走了 (u, d, l, r) 步后能碰到的最多机器人数。

    转移只需要考虑往四个方向多扩展一步即可,显然能扩展得到的机器人都要全部碰到最优,复杂度 (mathcal{O}(n ^ 4))

    F

    首先考虑树的情况。

    这个问题直接做无法下手,也无法得到有效的观察,考虑转化该问题。

    回想曾遇到过的 两色模型,同时注意到树是一个二分图,每次操作的两个点一定在二分图上的两部,感觉很有前途,于是不妨将问题往二分图上转化。

    首先将这颗树进行黑白染色,于是每次操作可以转化为:在两部选择一对有边相接且颜色不同的点 ((u, v)),将两者颜色翻转,求最少的次数使得两部颜色全部翻转。

    两部点对 ((u, v)) 颜色不同当且仅当被操作的次数奇偶性相同等价于原问题上颜色相同。

    于是这个问题有解就存在一个必要条件:两部的大小相等,于是先把不等的情况判掉。

    此时发现这个问题还是不好解决,考虑进一步转化这个问题。

    注意到每次涉及到交换的两点必定一白一黑,于是交换操作可以视作是一个黑点往相邻的白点移动。

    因此问题可以等价于:二分图上左部上每个点有一个黑子,右部上每个点是空的,黑子可以向一个空点移动,问左部黑子全部移动到右部的最小代价。

    于此同时,我们注意到所有黑子都是等价的,因此如果黑子想要越过黑子可以 调整 为将当前黑子和越过的黑子整体向前进的方向平移一位,因此 黑子每次必须移动到空点的限制就去除了(一个点上可以有多个黑子)。

    于是现在的问题可以再次被转化为:在黑子和空点之间匹配,两点匹配的代价是在树上的距离,最小化匹配的代价。

    答案考虑每条边的贡献,显然是黑子比空点多的一边需要经过这条边,且下界显然是可以达到的,于是树的情况就解决了。


    接下来考虑基环树的情况,因为树的做法需要依赖于二分图的性质,因此我们还需分环的奇偶性讨论。

    首先来考虑偶环的情况,此时依然满足二分图的性质。

    继续考虑每条边对答案的贡献,容易发现树边贡献不变。

    对于环上的边,注意到黑子与白点匹配时一定不存在某条边在匹配路径上被双向经过,因此我们先给环上的边定向,经过次数的符号代表环在匹配路径上的方向。

    容易发现相邻两边的差值是确定的,因为中间点子树内需要的黑点数量(带符号)确定。

    除此之外并无其他限制,具体地,我们令环上的边经过次数分别为 (x_1 sim x_k)(钦定环方向 (i o i + 1, k o 1)),环上点子树内需要黑点数量分别为 (d_1 sim d_k),那么有:

    [egin{cases} x_k - x_1 = d_1 \ x_1 - x_2 = d_2 \ vdots \ x_{k - 1} - x_k = d_k end{cases} ]

    这是一个 经典问题,容易注意到 (x_{2 sim k}) 能被 (x_1) 线性表出,因此最终最小化的函数可以形式化描述为(其中 (c) 序列均为常数):

    [sumlimits_{i = 1} ^ k |x_1 - c_i| ]

    这也是一个经典问题,选取 (c) 的中位数即可。


    对于奇环的情况,相当于是在同部之间加上了一条边,考虑修改最初始的转化。

    对于不同部的点依然是颜色不同才可以交换颜色,对于同部点只能是颜色相同才可以交换颜色。

    以下不妨令同部点在左部,且标号为 (x, y)

    注意到每次 (x, y) 只能将两个空点生成两个黑点,或将两个黑点吞掉变成两个空点。

    因此此时问题有解存在必要条件:两部点的数量奇偶性相同。

    于此同时,注意到此时同样满足黑点自由移动的调整,因此我们可以一开始就将缺失 / 多余的黑点生成,于是问题就转化为树的带权情况。

    不难发现解决方法是一样的,因此这题就做完了,容易发现每一步复杂度均为 (mathcal{O}(n))

    GO!
  • 相关阅读:
    Codeforces 46D Parking Lot
    矩阵快速幂
    Codeforces 295A Greg and Array
    hihocoder 1154 Spring Outing
    51NOD 1400 序列分解
    最短路之Dijkstra算法
    连通性1 求无向图的low值
    用数组实现临接表
    hihocoder 1181 欧拉路.二
    TCP多线程聊天室
  • 原文地址:https://www.cnblogs.com/Go7338395/p/15361995.html
Copyright © 2011-2022 走看看