[bzoj3004][SDOI2012]吊灯——樹形DP
2017-03-19 09:36
246 查看
Brief Description
給定一棵樹, 判斷是否可以將其分成\(\frac{n}{k}\)個聯通塊, 其中每個聯通塊的大小均爲k.
Algorithm Design
我們有一個結論: k可行iff存在\(\frac{n}{k}\)個點, 以這些點爲根的子樹大小爲k或k的倍數.
讀者可以自行yy一下證明.
有了這個結論之後, 我們可以算出每個size, 用一個桶統計一下就好了.
Code
#include <algorithm> #include <cctype> #include <cstdio> #include <cstring> const int maxn = 1200000; int fa[maxn], n, divide[maxn], size[maxn], f[maxn], tot = 0; void fuck(int n) { int i; for (i = 1; i * i < n; i++) { if (n % i == 0) { divide[tot++] = i; divide[tot++] = n / i; } } if (i * i == n) divide[tot++] = i; std::sort(divide, divide + tot); } int main() { // freopen("sdoi12_divide.in", "r", stdin); // freopen("sdoi12_divide.out", "w", stdout); scanf("%d", &n); char ch = getchar(); int cnt = 0; while (cnt < (n - 1)) { int x = 0; while (!isdigit(ch)) ch = getchar(); while (isdigit(ch)) { x = x * 10 + ch - '0'; ch = getchar(); } cnt++; fa[cnt + 1] = x; } fuck(n); for (int T = 1; T <= 10; T++) { printf("Case #%d:\n", T); memset(size, 0, sizeof(size)); memset(f, 0, sizeof(f)); for (int i = 2; i <= n; i++) { if (T != 1) { fa[i] = (fa[i] + 19940105) % (i - 1) + 1; } } for (int i = n; i; i--) size[fa[i]] += ++size[i]; for (int i = 1; i <= n; i++) f[size[i]]++; for (int i = 0; i < tot; i++) { int tmp = 0; for (int j = divide[i]; j <= n; j += divide[i]) tmp += f[j]; if (tmp == n / divide[i]) { printf("%d\n", divide[i]); } } } }
相关文章推荐
- BZOJ.3004.[SDOI2012]吊灯(结论)
- bzoj 2726 [SDOI2012]任务安排 CDQ分治维护凸包 dp
- bzoj 2707: [SDOI2012]走迷宫(Trajan+高斯消元+Dp)
- [BZOJ2726][SDOI2012]任务安排(DP+凸壳二分)
- BZOJ 2726: [SDOI2012]任务安排 [斜率优化DP 二分 提前计算代价]
- BZOJ 3004 吊灯 树形DP
- BZOJ2707 [SDOI2012]走迷宫 【概率dp + tarjan + 高斯消元】
- BZOJ 2707: [SDOI2012]走迷宫 拓扑+高斯消元+期望概率dp+Tarjan
- 【SDOI2012】bzoj2726 任务安排
- BZOJ 2726 [SDOI2012]任务安排
- BZOJ5333 [Sdoi2018]荣誉称号 【差分 + 树形dp】
- [bzoj4513][SDOI2016]储能表——数位dp
- BZOJ 2806 [Ctsc2012]Cheat ——后缀自动机 单调队列优化DP
- [BZOJ2726][SDOI2012]任务安排(斜率优化dp+cdq分治)
- 【BZOJ 4518】[Sdoi2016]征途 斜率优化dp
- bzoj 2815 [ZJOI2012]灾难(构造,树形DP)
- BZOJ2705 [SDOI2012] Longge的问题
- [BZOJ2878][NOI2012]迷失游乐园(环套树DP+概率)
- bzoj2748 [HAOI2012]音量调节(dp水)
- bzoj1226 [SDOI2009]学校食堂Dining (状压DP)