GCPC2017 题解
Posted rush-d-cat
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了GCPC2017 题解相关的知识,希望对你有一定的参考价值。
GCPC2017 题解
A
- 选择一个能看到所有点的方向,进行观察。
- 然后Z字抖动
B
- Polya定理
C
dp[i][j]
表示第i秒,到达j号ride的最小耗费
D
- 求闭包即可
E
- 对边权取
log
- 判断图有没有负环。
F
- 先施展一次hungary,记录下匹配的结果。
- 然后枚举哪个插座变成3个。
- 在原有的匹配结果上加入两个点,继续增广
G
- pick定理
H
- 先考虑一根链的情况。
考虑这组栗子:
A,B代表两只乌鸦,C代表松鼠,.代表节点
.........A.C..B.
这时动乌鸦A显然很沙比。因为一动A,松鼠活动范围就会变得很大很大
所以我们应该动乌鸦B。乌鸦B飞走后,我们把C可以活动的地方标注出来
.........A[......]
注意到乌鸦B必须到
.........A[B.....]
因为不这么做,下一步行动,还是只能动B,连着两步动一只乌鸦很不妙
因为,一步到位更好!
因此下一步
..........BA....
再下一步
...........AB...
再下一步
............BA..
再下一步
.............AB.
再下一步
..............BA
其实每一步两只乌鸦分工都很明确。一只负责看门,另一只负责压缩松鼠的活动空间。
令(f[son]):son
距离其子树中最远的叶子节点的距离
- 考虑一棵树,乌鸦A在root节点看门,乌鸦B在天涯海角。松鼠在root为根的子树内。如果松鼠在root的儿子son对应的子树内,那么游戏的步数就是(f[son]+1)
- 考虑乌鸦第一步该怎么走。
- case1: 第一步当然可以选择一只乌鸦看门,另一只乌鸦压缩空间。
- case2: 我们可以让一只乌鸦飞到一个更合适的节点看门。然后第二步再让另一只乌鸦压缩空间。比如说
......C...AB
这组栗子,第一步可能会是......A.....B
。所以我们可以枚举第一步该怎么走。如果第一步A走到了节点root,那么松鼠当然会选择(f(son))最大的那棵子树了,所以答案等于(max{ {f(son)}+1 }=f(root)) - 【如果,松鼠被乌鸦B看住了,去不了(f(son))最大的子树怎么办吖?】
- 【答:那为什么不让B看们啊?】
I
- 简单DP
J
- 咕咕咕
K
- 从大到小排序
以上是关于GCPC2017 题解的主要内容,如果未能解决你的问题,请参考以下文章
(寒假GYM开黑)2018 German Collegiate Programming Contest (GCPC 18)
2018 German Collegiate Programming Contest (GCPC 18)