HDU 5593 ZYB's Tree 树形dp
题目链接:
http://acm.hdu.edu.cn/showproblem.php?pid=5593
题意:
http://bestcoder.hdu.edu.cn/contests/contest_chineseproblem.php?cid=654&pid=1004
题解:
先自底向上跑一遍,求出以u为根的子树中与u距离小于等于k的节点数(不同的距离要分开存,否则无法递推上去,dp[u][i]存距离为i的节点数)
求好之后,再dfs一遍,这次换做自顶向下,目的是求u的兄弟(和兄弟的后代)以及u的祖先(和祖先的后代,不包括以u为根的子树)中与u距离小于等于k的节点数(也是分开存)
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std; const int maxn=5e5+;
typedef long long LL; int dp[maxn][];
int fa[maxn];
int N,K,A,B; struct Edge{
int v,ne;
Edge(int v,int ne):v(v),ne(ne){}
Edge(){}
}egs[maxn*]; int head[maxn],tot; void addEdge(int u,int v){
egs[tot]=Edge(v,head[u]);
head[u]=tot++;
}
//从下往上跑一遍
void dfs1(int u){
int p=head[u];
while(p!=-){
Edge& e=egs[p];
dfs1(e.v);
for(int i=;i<=K;i++){
//转移方程1:
dp[u][i]+=dp[e.v][i-];
}
p=e.ne;
}
dp[u][]=;
}
//从上往下跑一遍
void dfs2(int u){
if(fa[u]){
for(int i=K;i>=;i--){
//转移方程2:
dp[u][i]+=dp[fa[u]][i-]-dp[u][i-];//dp[fa[u]][i-1]有包括u本身,所以要扣掉u的那部分对fa[u]的贡献
}
dp[u][]++;
}
int p=head[u];
while(p!=-){
Edge& e=egs[p];
dfs2(e.v);
p=e.ne;
}
} void init(){
fa[]=;
memset(dp,,sizeof(dp));
memset(head,-,sizeof(head));
tot=;
} int main(){
int tc;
scanf("%d",&tc);
while(tc--){
scanf("%d%d%d%d",&N,&K,&A,&B);
init();
for(int i=;i<=N;i++){
int x=((LL)A*i+B)%(i-)+;
addEdge(x,i);
fa[i]=x;
}
dfs1();
dfs2();
LL ans=;
for(int i=;i<=N;i++){
int cnt=;
for(int j=;j<=K;j++) cnt+=dp[i][j];
ans^=cnt;
}
printf("%lld\n",ans);
}
return ;
}
HDU 5593 ZYB's Tree 树形dp的更多相关文章
- Bestcoder round #65 && hdu 5593 ZYB's Tree 树形dp
Time Limit: 3000/1500 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others)Total Submissio ...
- HDU5593 ZYB's Tree 树形DP +分治
感觉其实就是树分治,一次BC的题,感觉这次题目质量比较高,仅代表蒟蒻的看法 一次DFS获取每个点到子树的距离不大于K的点的个数, 然后一遍BFS获取从每个点父亲不大于K的的个数,层层扩展,还是想说 其 ...
- hdu5593/ZYB's Tree 树形dp
ZYB's Tree Memory Limit: 131072/131072 K (Java/Others) 问题描述 ZYBZYB有一颗NN个节点的树,现在他希望你对于每一个点,求出离每个点距 ...
- hdu 4514 并查集+树形dp
湫湫系列故事——设计风景线 Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others)Tot ...
- 熟练剖分(tree) 树形DP
熟练剖分(tree) 树形DP 题目描述 题目传送门 分析 我们设\(f[i][j]\)为以\(i\)为根节点的子树中最坏时间复杂度小于等于\(j\)的概率 设\(g[i][j]\)为当前扫到的以\( ...
- HUD 5593——ZYB's Tree——————【树形dp】
ZYB's Tree Time Limit: 3000/1500 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others)Tota ...
- hdu 4003 Find Metal Mineral 树形DP
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4003 Humans have discovered a kind of new metal miner ...
- hdu6035 Colorful Tree 树形dp 给定一棵树,每个节点有一个颜色值。定义每条路径的值为经过的节点的不同颜色数。求所有路径的值和。
/** 题目:hdu6035 Colorful Tree 链接:http://acm.hdu.edu.cn/showproblem.php?pid=6035 题意:给定一棵树,每个节点有一个颜色值.定 ...
- hdu-5834 Magic boy Bi Luo with his excited tree(树形dp)
题目链接: Magic boy Bi Luo with his excited tree Time Limit: 8000/4000 MS (Java/Others) Memory Limit: ...
随机推荐
- VMware vSphere Client的简单使用教程
1.首先登陆进去ESXI管理 实验VMware VS6.0版本 2新建虚拟机 确认信息 点击完成 2.开启虚拟机 右键打开控制台 加载光驱 选择虚拟机 Ctrl+Alt+delete重启 安装 来 ...
- IOS基础——IOS学习路线图(一)
一.一个月 1.OC语法基础. 2.KVC和KVO 3.IOS UI基础 4.UI表视图与集合视图 5.UIStoryboard和autoLayout 6.Ipad API 二.10天 7.静态页面考 ...
- 关于SQL表联接
以SQL2008为例,Microsoft SQL Server 2008支持四种表运算符-JOIN,APPLY,PIVOT,UNPIVOT.JOIN表运算符是ANSI标准,而其他三种是T-SQL对标准 ...
- Sublime Text 快捷键
ctrl+shift+t:重新打开最近关闭文件 快捷键 功能 ctrl+shift+n 打开新Sublime ctrl+shift+w 关闭Sublime,关闭所有打开文件 ctrl+shift+t ...
- WordPress 主题开发 - (四) 创建WordPress的主题HTML结构 待翻译
Now we're starting to get into the real meat of WordPress Theme development: coding the HTML structu ...
- 推荐个好东西swoole,php如虎添翼
Swoole:PHP语言的异步.并行.高性能网络通信框架,使用纯C语言编写,提供了PHP语言的异步多线程服务器,异步TCP/UDP网络客户端,异步MySQL,数据库连接池,AsyncTask,消息队列 ...
- Delphi 2010初体验,是时候抛弃Delphi 7了
Delphi 2010已于近日由Embarcadero公司发布.作者Kim Madsen作为一名资深的Delphi开发者,在他的博客中谈到了Delphi 2010的新性能.它的使用感受以及对Delph ...
- IS上部署MVC网站,打开后ExtensionlessUrlHandler-
以管理员运行下面的命令注册: 32位机器: C:\Windows\Microsoft.NET\Framework\v4.0.30319\aspnet_regiis.exe -i 64位机器: C:\W ...
- 比较C++中的4种类型转换方式
C++的四种cast操作符的区别并非我的原创-------------------------------------------from:http://blog.csdn.net/hrbeuwhw/ ...
- 一些关于python的小感想
python是一门优秀的语言,但随之而来的是大量的知识,各种模块,相信一个人的大脑是很难记住如此多的内容.这时后的我们就应该想办法避免去记忆这么多的内容. 1.查看官方文档(英语很重要,啥也不说了) ...