P2351 [SDOi2012]吊灯

 
 

题意:
  一棵树,能否全部分成大小为x的联通块。

分析:
  显然x是n的约数。然后对于一个约数x,判断能否分成 $ \frac{n}{x} $ 个大小为x的联通块。

  结论:如果x可以,那么一定存在$ \frac{n}{x} $个节点的子树大小是x的倍数。

  证明:上面的结论说明的也就是每个大小是x的倍数的点,对答案的贡献是1(每个点都可以分出一个大小为x的块),加起来就是$ \frac{n}{x} $。

  现在就要考虑一个点u的siz是kx,然后它的子树里如果没有其他点的siz的是x的倍数的话,它的贡献是1,它可以从根节点开始,分出一个包含根节点,一共x个点的联通块。

  然后考虑u的子树里还有一个点v的siz是x的倍数,那么如果它们还能分成两个大小为x的块的话,那么每个这样的点的贡献还是1。首先从在v的子树里一定可以从根开始分出一个大小为x的块(u在其中),然后u的子树里需要找一个大小为x的块,且不使用v中的点。假设去掉v中的点还剩siz[u]-siz[v]个,这也是x的倍数,所以u的子树里,从根开始,不占用v的点,还可以分出一个大小为x的块。说明u的子树可以贡献2,uv各自贡献1。

  如果u的子树还有这样的点,那么把v删掉,还是两个点的情况,所以还是合法的。

  到此发现每个大小为x的倍数的点,会对答案贡献1。$ \frac{n}{x} $$个,就会有$ \frac{n}{x} $个大小为x的联通块,如果小于则不行。

 
代码:
 #include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<iostream>
#include<cctype>
#include<set>
#include<vector>
#include<queue>
#include<map>
using namespace std;
typedef long long LL; inline int read() {
int x=,f=;char ch=getchar();for(;!isdigit(ch);ch=getchar())if(ch=='-')f=-;
for(;isdigit(ch);ch=getchar())x=x*+ch-'';return x*f;
} const int N = ; int fa[N], cnt[N], siz[N], n;
vector<int> v; bool check(int x) {
int res = ;
for (int i=x; i<=n; i+=x) res += cnt[i];
return res >= n / x;
} int main() {
n = read();
for (int lim=sqrt(n),i=; i<=lim; ++i) {
if (n % i == ) {
v.push_back(i);
if (n / i != i) v.push_back(n / i);
}
}
sort(v.begin(), v.end());
for (int i=; i<=n; ++i)
fa[i] = read();
for (int T=; T<=; ++T) {
printf("Case #%d:\n",T);
for (int i=; i<=n; ++i) cnt[i] = , siz[i] = ;
for (int i=n; i>=; --i) siz[fa[i]] += siz[i], cnt[siz[i]] ++;
for (int i=; i<v.size(); ++i)
if (check(v[i])) printf("%d\n",v[i]);
if (T != ) for (int i=; i<=n; ++i)
fa[i] = (fa[i] + ) % (i - ) + ;
}
return ;
}

P2351 [SDOi2012]吊灯的更多相关文章

  1. 洛谷P2351 [SDOi2012]吊灯 【数学】

    题目 Alice家里有一盏很大的吊灯.所谓吊灯,就是由很多个灯泡组成.只有一个灯泡是挂在天花板上的,剩下的灯泡都是挂在其他的灯泡上的.也就是说,整个吊灯实际上类似于[b]一棵树[/b].其中编号为 1 ...

  2. [bzoj3004] [SDOi2012]吊灯

    Description Alice家里有一盏很大的吊灯.所谓吊灯,就是由很多个灯泡组成.只有一个灯泡是挂在天花板上的,剩下的灯泡都是挂在其他的灯泡上的.也就是说,整个吊灯实际上类似于[b]一棵树[/b ...

  3. [SDOi2012]吊灯

    嘟嘟嘟 这题想了半天,搞出了一个\(O(10 * d * n)\)(\(d\)为\(n\)的约数个数)的贪心算法,就是能在子树内匹配就在子树内匹配,否则把没匹配的都交给父亲,看父亲能否匹配.交上去开了 ...

  4. BZOJ.3004.[SDOI2012]吊灯(结论)

    题目链接 BZOJ 洛谷 题意: 将树划分为k个连通块,要求每个连通块大小相同.输出可能的大小. 结论: 满足条件时颜色的连通块数为k,当且仅当有 \(n/k\) 个节点满足它的子树是k的倍数(显然还 ...

  5. [bzoj3004][SDOI2012]吊灯——樹形DP

    Brief Description 給定一棵樹, 判斷是否可以將其分成\(\frac{n}{k}\)個聯通塊, 其中每個聯通塊的大小均爲k. Algorithm Design 我們有一個結論: k可行 ...

  6. 【Luogu】P2351吊灯(脑洞后模拟)

    题目链接 这题要智商qwq.玩不来玩不来. 观察到(个P,能观察到的全都是dalao)x是解的充要条件是至少有n/x个节点的size是x的倍数. 证明请看这里 然后这题就变模拟了呀. #include ...

  7. BZOJ 2705: [SDOI2012]Longge的问题 [欧拉函数]

    2705: [SDOI2012]Longge的问题 Time Limit: 3 Sec  Memory Limit: 128 MBSubmit: 2553  Solved: 1565[Submit][ ...

  8. BZOJ 2705: [SDOI2012]Longge的问题

    2705: [SDOI2012]Longge的问题 Time Limit: 3 Sec  Memory Limit: 128 MBSubmit: 2554  Solved: 1566[Submit][ ...

  9. Bzoj3004 吊灯

    Time Limit: 10 Sec  Memory Limit: 128 MB Submit: 72  Solved: 46 Description        Alice家里有一盏很大的吊灯.所 ...

随机推荐

  1. 随滚动条滚动,始终处于屏幕的中间类似qq的浮动窗口 (能看到运动的过程)

    <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...

  2. ThreadLocal介绍

    作者:知乎用户链接:https://www.zhihu.com/question/23089780/answer/62097840来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注 ...

  3. docker-1-简介

    Dockers的出现: 一款产品从开发到上线,从操作系统,到运行环境,再到应用配置.作为开发+运维之间的协作我们需要关心很多东西, 这也是很多互联网公司都不得不面对的问题,特别是各种版本的迭代之后,不 ...

  4. 2spring注解:@Lazy,@Conditional,@import,FactoryBean接口

    大致的工程内容也来源于上一篇博文! https://www.cnblogs.com/Mrchengs/p/10108603.html 1.@Lazy懒加载 懒加载:针对单实例的 单实例bean,默认在 ...

  5. Mybatis 和Spring整合之原始dao开发

    F:\Aziliao\mybatis\代码\31.mybatis与spring整合-开发原始dao 1.1. SqlMapConfig.xml <?xml version="1.0&q ...

  6. 记录一次Git问题及其解决方案

    错误信息:fatal: refusing to merge unrelated histories 错误产生背景:我将原先测试的项目本地删除后提交,然后将新的项目按照git的提交步骤进行提交,在最后一 ...

  7. JSON数据转换之net.sf.json包的使用

    转载 解析json之net.sf.json https://blog.csdn.net/itlwc/article/details/38442667 一.介绍 使用之前需要导入的jar包: json- ...

  8. The Android ION memory allocator

    http://lwn.net/Articles/480055/ Back in December 2011, LWN reviewed the list of Android kernel patch ...

  9. Subnetting

    Subnet Addressing To better utilize IP address Subnet addressing introduces another hierarchical(分层) ...

  10. woff字体找不到导致的404错误

    在iis中添加mime类型: .woff  application/x-font-woff .woff2 application/x-font-woff