官方题解在
DIV2的前两题比较简单, 忽略
DIV2 第三题 1000, 题意是: 给一个N个节点的树(共有N - 1条边), 要求是从这些点中抽取一些点(可以一个也不选), 保证抽取的点也是一颗树。
一看这个题的结果非常大, 枚举所有可能的做法必定超时(O(2**50)), 观察到,可以通过树的递推关系来计算父节点的数目: 令dp[i]表示以i为根, 并且含有i的个数
含有某一个节点i的子树的数目: dp[i] = multi(dp[children of i] + 1),其中1表示 子树可以为空。
最后再计算 sum(dp[i]) for i in range(0, n), 别忘了 + 1
1 #include 2 #include 3 #include
DIV1 第一题, 注意T很大, 10**9, 暴力必定超时, 只能找规律了, 发现angle只能四个方向, 找到循环节(1,2,4) 再把没计算的 T - T % rotate 计算一下就好。
#include #include #include #include #include