感觉其实就是树分治,一次BC的题,感觉这次题目质量比较高,仅代表蒟蒻的看法

一次DFS获取每个点到子树的距离不大于K的点的个数,

然后一遍BFS获取从每个点父亲不大于K的的个数,层层扩展,还是想说 其实就是树分治。。。。。并没有什么DP

/*
Problem : 5593 ( ZYB's Tree )     Judge Status : Accepted
RunId : 15764784    Language : G++    Author : qianbi08
*/
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<string>
#include<iostream>
#include<cstdlib>
#include<queue>
using namespace std;
const int maxn=500005;
int head[maxn],fa[maxn],p;
int dp[maxn][11],n,k,a,b;
struct Edge
{int v,next;
}edge[maxn*2];
void addedge(int u,int v)
{edge[p].v=v;edge[p].next=head[u];head[u]=p++;
}
void dfs(int u)
{dp[u][0]=1;for(int i=head[u];~i;i=edge[i].next){int v=edge[i].v;if(v==fa[u])continue;dfs(v);for(int j=1;j<=k;j++)dp[u][j]+=dp[v][j-1];}
}
queue<int>q;
void bfs()
{while(!q.empty())q.pop();for(int i=head[1];~i;i=edge[i].next)q.push(edge[i].v);while(!q.empty()){int u=q.front();q.pop();for(int i=k;i>1;--i)dp[u][i]+=dp[fa[u]][i-1]-dp[u][i-2];++dp[u][1];for(int i=head[u];~i;i=edge[i].next)if(edge[i].v!=fa[u])q.push(edge[i].v);}
}
int main()
{int T;scanf("%d",&T);while(T--){scanf("%d%d%d%d",&n,&k,&a,&b);memset(head,-1,sizeof(head));memset(dp,0,sizeof(dp));p=0;fa[1]=0;long long aa=a;for(int i=2;i<=n;i++){aa+=a;int u=(aa+b)%(i-1)+1;int v=i;fa[v]=u;addedge(u,v);addedge(v,u);}dfs(1);bfs();int ans;for(int i=1;i<=n;i++){int sum=0;for(int j=0;j<=k;j++)sum+=dp[i][j];if(i==1)ans=sum;else ans^=sum;}printf("%d\n",ans);}return 0;
}

View Code

转载于:https://www.cnblogs.com/shuguangzw/p/5023310.html

HDU5593 ZYB's Tree 树形DP +分治相关推荐

  1. 2021牛客多校4 - Rebuild Tree(树形dp)

    题目链接:点击查看 题目大意:给出一棵 nnn 个节点的树,现在可以删掉 kkk 条边,然后加上 kkk 条边,问有多少种方案使得操作后 nnn 个点仍然是一棵树 题目分析:原树删掉 kkk 条边后会 ...

  2. 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: ...

  3. HDU 5834 Magic boy Bi Luo with his excited tree 树形DP

    Magic boy Bi Luo with his excited tree 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5834 Descript ...

  4. BZOJ.3227.[SDOI2008]红黑树tree(树形DP 思路)

    BZOJ orz MilkyWay天天做sxt! 首先可以树形DP:\(f[i][j][0/1]\)表示\(i\)个点的子树中,黑高度为\(j\),根节点为红/黑节点的最小红节点数(最大同理). 转移 ...

  5. LiberOJ #6210. 「美团 CodeM 决赛」tree 树形DP

    题目链接:点这里 题解: 需要证明,所求的路径一定是全部权值都为1或者,路径上权值至多有一个为2其余为1且权值2在路径中央. 然后树形DP 设定dp[i][0/1] 以1为根的情况下,以i 节点下子树 ...

  6. Codeforces Round #263 (Div. 2) D. Appleman and Tree 树形dp

    链接: http://codeforces.com/contest/462/problem/D 题意: 给定n个点的树, 0为根,下面n-1行表示每个点的父节点 最后一行n个数 表示每个点的颜色,0为 ...

  7. VK Cup 2012 Round 1 D. Distance in Tree (树形dp)

    题目:http://codeforces.com/problemset/problem/161/D 题意:给你一棵树,问你两点之间的距离正好等于k的有多少个 思路:这个题目的内存限制首先大一倍,他有5 ...

  8. ARC101E Ribbons on Tree 树形dp 容斥

    题目链接 题意: 给你一棵nnn个点的树,nnn是偶数,把这些点分成n2\frac{n}{2}2n​个点对,每个点对会把路径上的所有边覆盖,问你每条边至少覆盖一次有多少种配对方式.n<=5000 ...

  9. A. Parsa‘s Humongous Tree(树形DP + 贪心)

    Problem - 1528A - Codeforces 两个玩家正在玩一个游戏.他们有一个整数1,2,...,n的排列组合(排列组合是一个数组,其中从1到n的每个元素正好出现一次).这个排列组合没有 ...

最新文章

  1. monocross 环境搭建:MonoTouch Mono for Android
  2. 《研磨设计模式》chap25 访问者模式Visitor(3)联合组合模式+总结
  3. HDFC的完整形式是什么?
  4. 【.Net】C# 将Access中时间段条件查询的数据添加到ListView中
  5. 【CodeForces - 245H 】Queries for Number of Palindromes (带容斥的区间dp)
  6. [testNG]Cannot find class in classpath解决方法
  7. iOS开发之UITextField(输入框)限制只能输入整数和小数
  8. mac 电脑安装 svn和brew
  9. 对于三极管饱和状态的理解
  10. 【JVM】JVM基础
  11. 【故障处理】ORA-12162 错误的处理
  12. 【SEO实验室】使用百度SEO排名点击软件快速提升排名
  13. 千古兴亡多少事,一江春水向东流--转任总文章
  14. 第1章 微处理器、微型计算机、微型计算机系统的区别
  15. 索引的数据结构--MySQL
  16. An unexpected error has been detected by Java Runtime Environment
  17. npm ERR! code EINVAL npm ERR! EINVAL: invalid argument, read
  18. java中字节数组转换为字符串
  19. 学计算机基础word题,计算机操作基础Word练习题
  20. 更改路由表,让windows同时启用双网卡,令需要访问的IP随心所欲

热门文章

  1. git checkout 命令详解—— Git 学习笔记 16
  2. 记录每次更新到仓库 —— Git 学习笔记 10
  3. 更灵活的定位内存地址的方法---汇编学习笔记
  4. javascript 【小数转百分数 保留两位小数】
  5. Linux 文件查找命令
  6. Android7.0 PowerManagerService亮灭屏分析(一)
  7. 深度学习笔记:优化方法总结(BGD,SGD,Momentum,AdaGrad,RMSProp,Adam)
  8. Binder学习指南
  9. JZOJ 5476. 【NOIP2017提高组正式赛】奶酪
  10. ros轮式小车学习链接