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)

GCPC2018 Kitchen Cable Chaos(动态规划)

GCPC11j Time to live

学习笔记:python3,代码片段(2017)

Java 求解划分字母区间