感觉其实就是树分治,一次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. 使用Docx4j操作PPT指南系列(附一)
  2. python高级开发面试题_python面试的100题(16)
  3. 华三DHCP分配ip
  4. arccatalog点要素显示不完_如果你读不完显示屏说明书,至少读完这几句话吧
  5. python运用在哪些地方_必看 | 2020年,Python十大应用领域介绍!
  6. C语言中的二进制、八进制和十六进制的表示
  7. 7-8 判断三角形类型 (20 分)
  8. 将SSM架构中原来关于springSecurity3.x版本的写法配迁移到SpringBoot2.0框架中出现的问题解决记...
  9. 《计算机应用基础实训教程》,《计算机应用基础实训教程》修改稿(文).doc
  10. 使用spring的事务的三种方法
  11. Delphi 集合和字符串互转
  12. 网络安全事件收集,分析
  13. 计算机怎么看事件管理,win7系统事件查看器怎么打开
  14. java蚂蚁智力题,智力题大全_附答案
  15. 防止用户调整微信浏览器字体大小导致的显示异常
  16. WPf 带滚动条WrapPanel 自动换行 和控件右键菜单
  17. 【信息安全】工具篇--子域名收集
  18. 【jzoj2182】羊羊吃草
  19. matlab小波神经网络,MATLAB 小波神经网络预测求助大神
  20. 数据库用户权限的授予

热门文章

  1. 进入保护模式(三)——《x86汇编语言:从实模式到保护模式》读书笔记17
  2. ElasticSearch7.x「新特性」
  3. DSP学习--BCC校验(异或校验)
  4. C语言再学习-- assert 断言宏
  5. Java未被捕获的异常
  6. Algorand 共识算法 BA* 入门
  7. 利用任务调度特性检测Android模拟器
  8. java创建对象new后面为啥可以传入参数_来复习一下Java的对象知识
  9. QML编程之旅 -- 事件处理
  10. Qt 并行计算圆周率示例