【bzoj4401】块的计数(水dfs)
题目传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=4401
假设把树划分为x个节点作一块,那么显然只有当x|n的时候才可能存在划分方案,并且这种划分方案是唯一的。
并且对于一棵树,只有当有n/x个节点的子树大小%x==0的时候才可能存在划分方案,因为如果把一棵树的根节点及其所在的块切掉,那么剩下的子树若存在划分方案,一定满足这些子树的节点个数%x==0。
所以这道题就变成一道水题了。
代码(我本来想着用bfs代替dfs会跑得快一点,然而似乎并没有什么卵用):
- #include<cstdio>
- #include<cstring>
- #include<cmath>
- #include<cstdlib>
- #include<ctime>
- #include<algorithm>
- #include<queue>
- #include<vector>
- #include<map>
- #define ll long long
- #define min(a,b) (a<b?a:b)
- #define max(a,b) (a>b?a:b)
- ll read()
- {
- ll tmp=; char f=,c=getchar();
- while(c<''||''<c){if(c=='-')f=-; c=getchar();}
- while(''<=c&&c<=''){tmp=tmp*+c-''; c=getchar();}
- return tmp*f;
- }
- using namespace std;
- int size[],q[],fa[],cnt[];
- int fir[],ne[],to[];
- int n,tot=;
- void add(int x,int y){to[++tot]=y; ne[tot]=fir[x]; fir[x]=tot;}
- int main()
- {
- int i;
- n=read();
- for(i=;i<n;i++){
- int x=read(),y=read();
- add(x,y); add(y,x);
- }
- int h=,t=; q[]=; fa[]=-;
- while(h<=t){
- for(i=fir[q[h]];i;i=ne[i])
- if(!fa[to[i]])q[++t]=to[i],fa[to[i]]=q[h];
- ++h;
- }
- for(i=n;i;i--){
- size[q[i]]=;
- for(int j=fir[q[i]];j;j=ne[j])
- if(to[j]!=fa[q[i]])size[q[i]]+=size[to[j]];
- ++cnt[size[q[i]]];
- }
- int ans=;
- for(i=;i<=n;i++)
- if(n%i==){
- int tmp=;
- for(int j=i;j<=n;j+=i)tmp+=cnt[j];
- if(tmp*i==n)++ans;
- }
- printf("%d\n",ans);
- return ;
- }
跑得慢也会输
【bzoj4401】块的计数(水dfs)的更多相关文章
- bzoj4401: 块的计数
首先,块的大小确定的话,可以发现方案最多只有1种 然后就可以O(nsqrt(n))搞,不过会TLE 接着我们又发现,一个节点可以作一个块的根,当且仅当该节点的size能被块的大小整除 然后就可以O(n ...
- BZOJ4401:块的计数(乱搞)
Description 小Y最近从同学那里听说了一个十分牛B的高级数据结构——块状树.听说这种数据结构能在sqrt(N)的时间内维护树上的各种信息,十分的高效.当然,无聊的小Y对这种事情毫无兴趣,只是 ...
- BZOJ4401: 块的计数 思维题
Description 小Y最近从同学那里听说了一个十分牛B的高级数据结构——块状树.听说这种数据结构能在sqrt(N)的时间内维护树上的各种信息,十分的高效.当然,无聊的小Y对这种事情毫无兴趣,只是 ...
- 【BZOJ4401/3004】块的计数/吊灯 乱搞
[BZOJ4401]块的计数 Description 小Y最近从同学那里听说了一个十分牛B的高级数据结构——块状树.听说这种数据结构能在sqrt(N)的时间内维护树上的各种信息,十分的高效.当然,无聊 ...
- bzoj 4401: 块的计数
4401: 块的计数 Description 小Y最近从同学那里听说了一个十分牛B的高级数据结构——块状树.听说这种数据结构能在sqrt(N)的时间内维护树上的各种信息,十分的高效.当然,无聊的小Y对 ...
- bzoj 4401 块的计数 思想+模拟+贪心
块的计数 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 455 Solved: 261[Submit][Status][Discuss] Descr ...
- DFS求连通块(漫水填充法)
G - DFS(floodfill),推荐 Time Limit:1000MS Memory Limit:65536KB 64bit IO Format:%I64d & %I6 ...
- 【bzoj4401】块的计数 结论题
题目描述 给出一棵n个点的树,求有多少个si使得整棵树可以分为n/si个连通块. 输入 第一行一个正整数N,表示这棵树的结点总数,接下来N-1行,每行两个数字X,Y表示编号为X的结点与编号为Y的结点相 ...
- 【bzoj4401】块的计数
首先,块的大小确定的话,可以发现方案最多只有1种 然后就可以O(nsqrt(n))搞,不过会TLE 接着我们又发现,一个节点可以作一个块的根,当且仅当该节点的size能被块的大小整除 然后就可以O(n ...
随机推荐
- Uncaught Error: artDialog: Document types require more than xhtml1.0
这需要声明html文档,加上如下声明就不会报错了! <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" ...
- CGI FastCGI PHP-CGI PHP-FRM
CGI(Common GateWay Interface )通用网关接口,CGI可以让一个客户端,从网页浏览器向执行在Web服务器上的程序请求数据.CGI描述了客户端和这个程序之间传输数据的一种协议标 ...
- Invalid bound statement (not found) 问题处理
最近开发过程中遇到一个BUG:Invalid bound statement (not found): com.mapper.ResourceIdMappingsBatchMapper.deleteR ...
- 内核源码阅读vim+cscope+ctags+taglist
杜斌博客:http://blog.db89.org/kernel-source-read-vim-cscope-ctags-taglist/ 武特博客:http://edsionte.com/tech ...
- :eq()中的参数详解——需要注意
:eq()的括号中的参数如果是非负数则在DOM对象中按从上到下的顺序查找指定的元素,但是,如果是是负数,则在DOM中从下向上查找指定元素. 如下实例: 如果 $("#divTag div:e ...
- Springboot中jar 重复冲突 导致 静态资源加载问题!
这个jar 其实在common 中也是存在的 ,当时没注意看,就导入进来了,然后 css js 等一些静态资源全部不能加载!具体原因我没去深挖!后面找个时间深挖下,先填坑!
- mix-in class selectors
语言特性 | Less 中文网 http://lesscss.cn/features/#mixins-feature Mixins "mix-in" properties from ...
- Bean\Entity\Model\POJO\Dto\EJB简单解析
一.Bean 对于Bean而言,只要是Java的类的就可以称为一个Bean, 更用在Spring上,被Spring管理的对象就可以将其称作为Bean. 它不仅仅可以包括对象的属性以及get,set方法 ...
- 如何定义 match 常量?
namespace MathConstants { const double E = 2.71828182845904523536; // e const double LOG2E = 1.44269 ...
- 设置mysql外网访问
任意主机以用户root和密码mypwd连接到mysql服务器mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'myp ...