【动态规划】cf1034C. Region Separation

 质因数分解套路的复杂度分析的动态规划

题目大意

有一颗$n$个节点有点权的树,初始整棵树为$1$号区域,要求满足下列规则:

  • 除非$i$是最后一个等级,否则每一个$i$级区域都要被分成至少两个$i+1$级区域
  • 对于每种等级,每个点必须恰好属于一个区域
  • 一个区域的点集必须是连通的
  • 对于相同等级,每个区域必须拥有相同的点权和

问有多少种合法的划分方案,$n \le 10^6,a_i \le 10^9$.


题目分析

首先考虑判断把树分为$k$个2级区域的合法性$f_k$,记点权和为$tot$。

一种朴素的想法就是对于每一个$k$,自底向上遍历整棵树,若剩余子树大小恰好为$tot\over k$,就割去这颗子树;如果整棵树能够被处理完,$k$就是合法的。每次判定复杂度为$O(n)$.

注意到这个想法里,每次割去子树的大小$s_i$恰好是$tot\over k$的倍数;并且不难发现,$k$合法的充要条件就是恰有$k$个$s_i≡0(\text{mod }\frac{tot}{k})$。简短解释一下:对于一颗$s_i≡0(\text{mod }\frac{tot}{k})$的子树,由于它的所有子树都奉行割去$s_j≡0(\text{mod }\frac{tot}{k})$的原则,那么剩下的包括点$i$的连通块就是$i$子树内最小的$\ge {tot\over k}$的连通块。因此,$\sum [s_k≡0(\text{mod }\frac{tot}{k})] \le k$;并且当且仅当$=k$时合法。

有了这个性质,考虑如何统计$f_k$。容易发现对于合法的$k$,$\frac{tot}{k}$的任意约数$k'$都是合法的。而对于子树$s_i$,其最小有贡献的$k=\frac{tot}{\text{gcd}(s_i,tot)}$。所以这里只需要对每个$s_i$存下最小的合法$k$,再以质因数分解题的套路处理一遍就能算出$[f_k=k]$了。因此处理$f_k$的复杂度是$O(n\ln n)$。

接下去考虑dp计算把整棵树分为若干个$i$级区域的方案数$g_i$。

转载于:https://www.cnblogs.com/antiquality/p/10692714.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/277963.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

阿里大鱼短信介入demo分享

下面是关于大鱼短信平台对接的例子,发短信的话,可以用这个,很好用 /*** 通过阿里短信接口发送短信验证码* ***/ public class SendSmsUtil {private static Logger logger Logger.getLogger(SendSmsUtil.class);/*** 生成验证码* return*/pu…

GraphAPI 1.0中新增加的Teams API

这篇继续介绍BUILD大会里的内容:两个新加入GraphAPI 1.0的关于Teams的API。 这两个新增api是关于在频道Channel里发送消息和回复消息的。实际上这两个api在beta版本中早就已经加入,上个月build大会中公布的只是把这两个api正式发布到1.0版本&#xff0c…

【数据结构】线性表(一):顺序列表

线性表(linear_list)是最常用且最简单的一种数据结构,简言之,一个线性表是n个数据元素的有序序列。 例如:(a1 , ... , ai-1 , ai , ai1 , ... , an):ai-1 是 ai 的直接前驱,ai1 是 ai 的直接后驱。 并且&am…

Python_XlrdXlwt

1 import xlrd 2 # \U 开始的字符被编译器认为是八进制 解决方法 r 3 objWB xlrd.open_workbook(rC:\Users\IBM\Desktop\S1\7月下旬入库表.xlsx) 4 # 索引号 objTable objWB.sheet_by_index(0) 5 objTable objWB.sheet_by_name(7月下旬入库表) 6 # 单元格3种读取方式 7 print…

校招需要看的书 巩固的知识

前言 感谢教练,学长们,队友,lollipop,猫哥,李哥,表哥,鸡哥,样样,咸糖,茗记,明沙,嘻,树佬(排名不分先后)等等太多太多的人的…

新的Teams API权限控制

这篇继续介绍BUILD大会里的内容:新的Teams API权限。这些新的权限让开发者可以更加细粒度的设置权限。 之前有些开发人员有问过我,为什么Graph API的权限这么多,为什么不针对Teams弄一个总的权限,这样不是更加简单吗?…

物料主数据(MM03)跳转函数

CP_08_MATERIAL_SHOW 使用感觉能使自己的代码显得更改高端些。 其中参数MTSTA_IMP的选值参照表T132。转载于:https://www.cnblogs.com/tangcy1110/p/9081380.html

二叉树的蛇形遍历 leetcode 103

给定一个二叉树,返回其节点值的锯齿形层次遍历。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。 例如:给定二叉树 [3,9,20,null,null,15,7], 3/ \9 20/ \15 7返回…

Teams Tab的Single Sign-On

在我写这篇文章的时候,这个SSO机制还是在 Developer Preview 阶段,可能在发布前还会有一些改进。不过我觉得这个功能很好,所以先和大家分享一下。 如果大家之前已经开发过Teams的tab应用,可能会发现如果你需要一个当前用户的toke…

vim编辑器的使用--转自MJ学长

一、引言 1. vim是一款功能强大的文本编辑器,如果使用熟练,将会有效帮助我们提高编辑文本、程序的效率。vim编辑器的上手使用门槛比较高,很多人怯于要记很多命令,往往在学习的初期阶段就望而却步。 2. vim的学习需要不断的练习、使…

算法引入

算法的概念: 解决问题的思路。 时间复杂度: 定义: 基本运算的执行数量。是算法效率的衡量的量。 计算准则: 基本操作:即只有常数项。复杂度认为1顺序,按照加法计算循环,按照乘法计算条件。按照最…

如何开发Teams Bot

很多朋友问我如何开发一个成功的Teams Bot,他们说Bot Framework SDK看起来简单,但是真要的去开发一款成熟的bot,很多地方还是不知道如何使用。我从最早的bot framework还在beta的时候开始用,后来framework经历了多次大的改动&…

[CF903G]Yet Another Maxflow Problem

[CF903G]Yet Another Maxflow Problem 题目大意: 有\(A\)类点和\(B\)类点各\(n(n\le2\times10^5)\)个,所有\(A_i\)到\(A_{i1}\)有一条权值为\(a_i\)的有向边,所有\(B_i\)到\(B_{i1}\)有一条权值为\(b_i\)的有向边,另有\(m(m\le2\t…

P1579哥德巴赫猜想

写来自己学习用~ 题目内容: 1742年6月7日哥德巴赫写信给当时的大数学家欧拉,正式提出了以下的猜想:任何一个大于9的奇数都可以表示成3个质数之和。质数是指除了1和本身之外没有其他约数的数,如2和11都是质数,而6不是质…

在VSCode Remote环境下开发Teams Bot

我使用VS Code开发已经有蛮长一段时间了,时间长了,越来越喜欢VS Code,虽然有些时候会没有传统的VS方便,比如开发Azure Function时你需要编写一下launch.json,而且你需要手动启动StorageEmulator,但是也正是…

查看安卓APK源码破解

原文:查看安卓APK源码破解工具准备&#xff1a; <1>.android4me的AXMLPrinter2工具 <2>dex2jar <3>jd-gui 工具下载&#xff1a;http://download.csdn.net/detail/catshitone/8491347 开始&#xff1a; 第一步&#xff1a; 首先用解压软件&#xff08;如好…

实验六:类的封装

一、实验代码如下&#xff1a; 1 package 实验6;2 3 import java.util.Scanner;4 5 6 public class Account {7 8 public int id;9 public String name;10 public long number;11 public long time;12 public int money;13 14 //方法Account()…

Teams Bot开发系列:初识Bot

上次我们讲了Teams Bot开发的概述&#xff0c;讲了Azure Bot Service&#xff0c;Bot Framework SDK和我们自己的bot服务的概念&#xff0c;这篇文章就带大家看看Azure Bot Service和我们的bot是如何发生关系的。 我们自己开发的bot服务实际上就是一个api service&#xff0c;…

[环境搭建]SDN网络感知服务与最短路径应用

1.安装python模块networkxpip install networkx2.给Network_Awareness.py加修改权限chmod 777 Network_Awareness.py3.下载安装ryugit clone git://github.com/osrg/ryu.gitcd ryu sudo python ./setup.py install#若已安装ryu,删了再装&#xff0c; pip uninstall ryu4.修改“…

我需要别人承认才快乐吗?

关于生命的感悟两个故事第一个故事&#xff0c;一个尖子生考上了麻省理工学院&#xff0c;在那里所有同学都很优秀&#xff0c;竞争非常强烈&#xff0c;她发现再也不能出类拔萃&#xff0c;在各方面赢过别人&#xff0c;于是觉得生活看不到希望&#xff0c;郁郁寡欢&#xff0…