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: ...
随机推荐
- Everyday is an Opportunity
Quote Of The Day: “Everyday is an Opportunity to Learn and Grow, Don’t Waste Your Opportunity.” – Al ...
- 第一部分 CLR基础:第1章 CLR的执行模型
1.1将源代码编译成托管模块
- MongoDB查询语法
mongoDb是非关系型数据库,用习惯了mssql,mysql等数据库的需要转换一下思维 mongoDb存的是与js的json结构一样的文档,表中的每一条记录都可以结构不同 1,大于,小于,大于等于, ...
- iOS中使用子线程的完整方法
http://www.cnblogs.com/ygm900/archive/2013/06/23/3151691.html 第一步:开启子线程 //开启子线程到网络上获取数据 myFirstThrea ...
- OXPattern
10000的随机数组由ox组成,查找数组中oox...x(任意x)oox....x(任意x)o的个数 enum { DATA_SIZE = , }; enum enum_status { STATUS ...
- 安装wampserver出现“The Program can't start because MSVCR110.dll is missing from your computer. Try reinstalling the program to fix this problem”
问题描述: 今天安装wampserver的时候出现"The Program can't start because MSVCR110.dll is missing from your com ...
- sqlserver,sqlite,access数据库链接字符串
SqlServer:string connection = "server=32.1.1.48;database=数据库名;user=sa;password=sa2008"; ac ...
- Spring组件扫描<context:component-scan/>使用详解
1.如果不想在xml文件中配置bean,我们可以给我们的类加上spring组件注解,只需再配置下spring的扫描器就可以实现bean的自动载入. <!-- 注解注入 --> <co ...
- HTTP上传文件探究
通常情况下,我们想在网页上上传一个文件的时候,会采用<input type="file">标签,但是你有没有想过,为什么通过这样一个标签,服务器端就能获取到文件数据呢? ...
- windows phone 8.1 HttpWebRequest 请求服务器
public string SendGetRequest(string baseurl, string parameters) { string parassb = parameters; ) { b ...