AGC 028

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Timsei/article/details/83065830

C 一道和以前做过的一道codeforces类似的题,但不大一样。
题意: 每个点两个权值L ,R, 要求把这些数排成一个环,相邻两点ab间的(处于逆时针方向的数为a)的代价为 min(L[a], R[b]), 求能构造的最小的环。
n 100000

这个题自己做出来的。
首先考虑 如果说能分解成多个环的话,我们一定可以构造一个方案使得权值和为所有L,R
从小到大排序的前n个数的权值和。
那么我们考虑对于什么情况我们能够构造出这样的方案。
首先,如果说有一个点它的L和R均没有被选,那么一定能够构造。
由于有一个点没有选,并且总共选择了n个数,所以必有一个点L,R 均被选择。
我们从一个之选择了一边的点出发。 (如果没有这样的点,显然成立)
我们把集合分为4类
A类 选择了 L 没有选择 R
B类 选择了R 没有选择 L
C类 没有选
D类 选择了 L 和 R。
我们考虑 从一个点出发遍历排列的过程,当前点的左侧已经确定,现在确定右侧。 这个时候 我们考虑 可以如何转移
A -> D
A -> A
B -> C
B -> B
C -> D
C -> A
D ->C
D-> B
这样子 就可以看出构造了, 先把A 利用 A至A 消耗玩,再利用一个A至D的转换至D 再转到B 消耗玩 B 转到C 再转回A。
所以这种情况一定可行。
那么这里还可以看出,选的数都在同一侧时可以直接满足。
接下来证明上述两种条件是 充要条件。
首先 充分性已经证明,必要性也很好证,没有C 和 D 就无法连接A B 必将分为两个环。

所以做法就是 想办法调整为以上两种,我们只需要贪心的做就可以了。

D 给一个 有 2 * n 点被标出的圆, 编号为i的点表示从1号点顺时针方向第i个点。你要画出n对匹配,在这n对匹配之间连边, 可以通过走线段到达即为联通。 告诉你k对固定匹配,求对于剩下的 所有点任意匹配的所有方案的联通块数的和。
n 300

这个题 非常的巧妙,我想到了要枚举单个或者一类联通块单独统计贡献。但是却无从下手。
这个题目提供了一种 常用的方法。 dp[l][r] 表示 联通块的点标号最小为l,最大为r的联通块出现了多少次,这样子就可以用容斥来做了,具体容斥不再细讲。
容斥的状态 不是连续的一段的题第一次见。

阅读更多
换一批

没有更多推荐了,返回首页