problem

洛谷链接

solution

显然,颜色相同的灯泡形成一个连通块,且连通块的大小 i∣ni\mid ni∣n。

这道题要能发现一个结论:一定至少存在一种颜色的连通块 满足该联通块内的任意一个节点 都不是异种颜色点 的父亲。

即,至少有一个点其子树(含自己)内中所有点颜色均相同。

证明的话,可以考虑将每种颜色连通块看作一个点。

父亲与儿子颜色不同的边,转化到新图上的父亲颜色连通块点到儿子颜色联通块点的一条有向边。

显然这是一个 DAG\text{DAG}DAG,得证。(如果成环,意味着原图上某个颜色点就没有形成一个连通块而是多个)

拓扑排序传递连通块大小,我们可以推出每个连通块内都至少有个点 uuu 满足 i∣sizui\mid siz_ui∣sizu​。

那么就可以做了,本题特殊的性质满足每个点的父亲编号都小于自己,直接倒序遍历统计子树大小即可。

枚举联通块大小 iii,枚举所有 i∣ji\mid ji∣j ,记录 sizu=jsiz_u=jsizu​=j 的点有 cntjcnt_jcntj​ 个,将这些节点数累和 tottottot。

最后看 tot∗i≥ntot*i\ge ntot∗i≥n 是否包含了整棵树。

code

#include <bits/stdc++.h>
using namespace std;
#define maxn 1200005
int n;
int f[maxn], siz[maxn], cnt[maxn];void read( int &x ) {x = 0; char s = getchar();while( s < '0' or s > '9' ) s = getchar();while( '0' <= s and s <= '9' ) {x = ( x << 1 ) + ( x << 3 ) + ( s ^ 48 );s = getchar();}
}int main() {scanf( "%d", &n );for( int i = 2;i <= n;i ++ ) read( f[i] );for( int t = 1;t <= 10;t ++ ) {printf( "Case #%d:\n", t );if( t ^ 1 ) {for( int i = 2;i <= n;i ++ )f[i] = ( f[i] + 19940105 ) % ( i - 1 ) + 1;}for( int i = 1;i <= n;i ++ ) siz[i] = 1, cnt[i] = 0;for( int i = n;i;i -- ) siz[f[i]] += siz[i];//siz[i]:i子树的大小 含自己for( int i = 1;i <= n;i ++ ) cnt[siz[i]] ++;//cnt[i]:子树大小为i的节点个数for( int i = 1;i <= n;i ++ ) //枚举连通块大小if( n % i == 0 ) {int tot = 0;for( int j = 1;j * i <= n;j ++ ) { //加上所有子树大小为i倍数的节点个数tot += cnt[i * j];if( tot * i >= n ) {//一个节点至少含i个点 判断是否包含了整棵树printf( "%d\n", i );break;}}}}return 0;
}

[SDOI2012]吊灯(结论)相关推荐

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

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

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

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

  3. [SDOI2012] 吊灯(树形dp)

    吊灯(divide)题目描述 Alice家里有一盏很大的吊灯.所谓吊灯,就是由很多个灯泡组成.只有一个灯泡是挂在天花板上的,剩下的灯泡都是挂在其他的灯泡上的.也就是说,整个吊灯实际上类似于一棵树.其中 ...

  4. (吊灯止损和YOYO止损) --- ATR作为入场工具的应用示例

    入场背景:(记住,入场背景告诉我们不久将会出现交易机会,而入场触发器告诉我们现在入场交易) 波动区间收缩背景:许多技术派已经注意到大幅价格运动往往出现在价格平静的横盘整理之后.通过比较短期ATR和长期 ...

  5. 区块链编程完全指南:平台、语言与结论

    链客,专为开发者而生,有问必答! 此文章来自链客区块链技术问答社区,未经允许拒绝转载. 区块链,代表着未来的发展方向.是的,在文章开头,我们首先给出这样的结论.当然,认定未来将围绕这一新兴技术而延拓绝 ...

  6. 高考大数据:哪个省才是高考地狱模式?结论和想象不太一样

    来源 | 国金证券吴劲草 <哪些省才是真正的高考地狱模式?-数据量化全国31省高考难度,结论可能和想象中不太一样> 不同省份的高考难度,一直是一个争议严重的问题. 每个地方的人,都会觉得自 ...

  7. 用Python分析淘宝2000款避孕套,得出这些有趣的结论

    我们在上一篇的时候已经将淘宝数据爬取下来了,但是并没有做数据分析.所以今天这篇文章就是教大家如何去分析数据,得出一些有用的结论! Python语言相比其他语言的优势在哪里?猪哥认为是数据分析和人工智能 ...

  8. 遇到的仍未学习的各种结论

    约瑟夫环:结论板子啦啦啦 n边形费马点:板子以及结论 五边形数:板子板子 欧拉函数:结论结论 全局最小割:算法啦啦啦 康托展开:算法 莫比乌斯反演:算法 莫队:算法 曼哈顿最小生成树 cdq分治:算法 ...

  9. Codeforces Round #698 (Div. 2) D. Nezzar and Board(一步步推出来,超级清晰,不猜结论,看不懂来打我 ~ 好题 )

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! D - Nezzar and Board Problem A Nezzar and Board 我们在黑板上写了 nnn 个数,x1,x2 ...

最新文章

  1. 利用spring aop统一处理异常和打日志
  2. 神奇的marquee--滚动的文字
  3. Android 实现系统更新功能
  4. 练习. SQL--选修课程练习
  5. 从选秀策略看市场测试
  6. [JavaWeb-HTML]HTML标签_表单标签
  7. 异步网络消息处理框架
  8. 前端学习(2859):简单秒杀系统学习之前端界面布局
  9. 我有机器人合体成一个大力神_史上最菜大力神(三)——SS加强级高塔
  10. ROS 搞懂多话题回调机制以及消息队列
  11. 诺基亚linux系统手机系统下载,智能手机操作平台大翻盘 诺基亚拥抱Linux
  12. 用python判断素数_python判断素数
  13. 上计算机课睡觉检讨书400,课堂睡觉200字检讨书
  14. 68个Python内置函数详解,进阶必备
  15. Qt 纯代码模仿 WPS 登录界面
  16. JVAV SE学习总结(01)
  17. 数据分析 学习小结记录
  18. 开源的IoT物联网平台大比拼
  19. 偶尔出现404怎么回事?
  20. 【Lombok】@With | 通过重新构造对象修改不可变属性

热门文章

  1. 全球100款大数据工具汇总(前50款)
  2. 为什么AI工程师成为当前薪资最高的技术岗位
  3. html语言简单,简单的html语言计算器
  4. php smtp验证,php通过smtp验证登陆
  5. android studio插入数据表中没有_学Java能拿高薪吗 Java中常见排序算法有哪些
  6. rsa算法c语言实现_数据结构与算法之线性表-顺序表实现(C语言版本)
  7. cv2.imread读取图像结果none_python cv2.imread 读取中文路径的图片返回为None的问题
  8. C++中输入一组数字 以换行符结束输入
  9. php 百度云 上传,求个PHP版百度云BOS上传文件的dome
  10. 创建型模式——工厂模式