题目链接 BZOJ

洛谷

题意: 将树划分为k个连通块,要求每个连通块大小相同。输出可能的大小。

结论: 满足条件时颜色的连通块数为k,当且仅当有 \(n/k\) 个节点满足它的子树是k的倍数(显然还有 \(k|n\) )。

证明就不证了,说下理解(然而也说不清楚。。)。

比如一个点的子树大小为 \(x*k\),如果满足上述条件,即这棵子树(包含根节点)一定有x个点子树大小为k的倍数,且把sz[]为k的点依次删去,最后肯定能删掉整棵子树。

因为它就 \(x*k\) 那么大。。说不清楚啊。。想想应该是合理的。

因为父节点编号一定比子节点小,更新sz[]时倒序循环一遍即可,不需要DFS。

//14964kb	3036ms
#include <cstdio>
#include <cctype>
#include <cstring>
#define gc() getchar()
#define XXX (19940105)
const int N=1200005; int n,fa[N],sz[N],num[N],cnt,p[10005],lim[10005]; inline int read()
{
int now=0;register char c=gc();
for(;!isdigit(c);c=gc());
for(;isdigit(c);now=now*10+c-'0',c=gc());
return now;
} int main()
{
n=read();
for(int i=2; i<=n; ++i) if(!(n%i)) p[++cnt]=i,lim[cnt]=n/i;//if(i*i!=n) p[++cnt]=n/i;
for(int T=1; T<=10; ++T)
{
memset(sz,0,sizeof sz), memset(num,0,sizeof num);;
for(int i=2; i<=n; ++i) fa[i]=T==1?read():((fa[i]+XXX)%(i-1)+1);//read()不怂233.
for(int i=n; i; --i) sz[fa[i]]+=(++sz[i]);
for(int i=1; i<=n; ++i) ++num[sz[i]];
printf("Case #%d:\n1\n",T);//判掉1也行。
for(int t,i=1; i<=cnt; ++i)
{
t=0;//子树sz为x*p[i]的节点个数
for(int j=1; j<=lim[i]; ++j) t+=num[j*p[i]];
if(t*p[i]==n) printf("%d\n",p[i]);
}
}
return 0;
}

BZOJ.3004.[SDOI2012]吊灯(结论)的更多相关文章

  1. P2351 [SDOi2012]吊灯

    P2351 [SDOi2012]吊灯 https://www.luogu.org/problemnew/show/P2351     题意: 一棵树,能否全部分成大小为x的联通块. 分析: 显然x是n ...

  2. [bzoj P2726] [SDOI2012]任务安排

    [bzoj P2726] [SDOI2012]任务安排 Time Limit: 10 Sec Memory Limit: 128 MB Submit: 1204 Solved: 349[Submit] ...

  3. 【BZOJ】【3004】吊灯

    思路题 要将整棵树分成大小相等的连通块,那么首先我们可以肯定的是每块大小x一定是n的约数,且恰好分成$\frac{n}{x}$块,所以我有了这样一个思路:向下深搜,如果一个节点的size=x,就把这个 ...

  4. BZOJ 3901 棋盘游戏 (找结论+枚举+贪心)

    题面 略 BZOJ 传送门 分析 具体分析见 dalao博客 妙就妙在当i<x,j<xi<x,j<xi<x,j<x时,(i,j)(i,j)(i,j) ^ (i,x) ...

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

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

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

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

  7. BZOJ 2705: [SDOI2012]Longge的问题 GCD

    2705: [SDOI2012]Longge的问题 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnl ...

  8. bzoj 2706: [SDOI2012]棋盘覆盖 Dancing Link

    2706: [SDOI2012]棋盘覆盖 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 255  Solved: 77[Submit][Status] ...

  9. bzoj 2705: [SDOI2012]Longge的问题 歐拉函數

    2705: [SDOI2012]Longge的问题 Time Limit: 3 Sec  Memory Limit: 128 MBSubmit: 1035  Solved: 669[Submit][S ...

随机推荐

  1. internal in C#

    说白了 被 internal 修饰的东西只能在本程序集(当前项目)内被使用. 被 protected internal 修饰的属性/方法 可以在其他项目中,被派生类使用 例如有两个项目app1和app ...

  2. 【整理】HTML5游戏开发学习笔记(2)- 弹跳球

    1.预备知识(1)在画布上绘制外部图片资源(2)梯度(gradient):HTML5中的对象类型,包括线性梯度和径向梯度.如createLinearGradient,绘制梯度需要颜色组http://w ...

  3. javascript数组赋值操作

    最近在司徒正美的<javascript框架设计>,在里面发现了一个段代码 ...... var _len = arr1.length; while (_len) { arr2[--_len ...

  4. CentOS 编译 GCC 7.2

    CentOS 编译 GCC 7.2 下载源码 wget http://ftp.tsukuba.wide.ad.jp/software/gcc/releases/gcc-7.2.0/gcc-7.2.0. ...

  5. Sublime Text 2 破解 on Mac

    用Sublime Text 2自己打开自己的二进制文件:Sublime Text 2/Contents/MacOS/Sublime Text 2 搜索所有3342 3032 都替换成3242 3032 ...

  6. BFS的队列

    按老师上课的话来总结,队列变化多端:   普通模板没有代价: 普通队列FIFO 01代价: 双端队列,单调队列 任意代价: 优先队列/堆,最短路SPFA/DIJKSTRA

  7. Chrome插件:gitlab activity dashboard background-color

    背景 我一般都是在activity dashboard页看同事的提交记录,这样只要我有权限的项目有人提交了我就能够知道,虽然提交的具体代码压根不看.......但至少能够了解各个项目的开发情况(如果大 ...

  8. makefile 中 foreach

    四.foreach 函数 foreach函数和别的函数非常的不一样.因为这个函数是用来做循环用的,Makefile中的foreach函数几乎是仿照于Unix标准Shell(/bin/sh)中的for语 ...

  9. Java web项目使用webSocket

    前端: <%@ page language="java" import="java.util.*" pageEncoding="UTF-8&qu ...

  10. svn导入项目和部署方面的相关问题

    前一阵子忙于部署项目的事情,在这个过程之中遇到了一些问题,查阅了相关资料解决了问题于是就决定分享给大家,可能会对大家有一定的帮助.我在下面中可能会提到dubbo的一些问题,dubbo是用于分布式的系统 ...