博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
hdu 5593 ZYB's Tree 树形dp
阅读量:6426 次
发布时间:2019-06-23

本文共 1326 字,大约阅读时间需要 4 分钟。

ZYB's Tree

Time Limit: 20 Sec

Memory Limit: 256 MB

题目连接

http://acm.hdu.edu.cn/showproblem.php?pid=5593

Description

ZYB has a tree with N nodes,now he wants you to solve the numbers of nodes distanced no more than K for each node.

the distance between two nodes(x,y) is defined the number of edges on their shortest path in the tree.

To save the time of reading and printing,we use the following way:

For reading:we have two numbers A and B,let fai be the father of node i,fa1=0,fai=(A∗i+B)%(i−1)+1 for i∈[2,N] .

For printing:let ansi be the answer of node i,you only need to print the xor sum of all ansi.

Input

In the first line there is the number of testcases T.

For each teatcase:

In the first line there are four numbers N,K,A,B

1≤T≤5,1≤N≤500000,1≤K≤10,1≤A,B≤1000000

Output

For T lines,each line print the ans.

Please open the stack by yourself.

N≥100000 are only for two tests finally.

Sample Input

1

3 1 1 1

Sample Output

3

HINT

 

题意

 

题解:

我们维护两个dp,dp1[i][j]表示以i为根节点的子树,有多少个点在距离为j的位置

dp2[i][j]表示并不是在子树的,有多少个离他距离为j的点

首先很容易的在树上维护处dp1[i][j]

然后我们再扫一遍用容斥做出dp2就好了

代码:

 

#include
#include
#include
#include
using namespace std;#define maxn 500050vector
E[maxn];int dp[maxn][12];int dp2[maxn][12];int n,k,A,B;void dfs(int x){ dp[x][0]=1; for(int i=0;i

 

转载地址:http://fjyga.baihongyu.com/

你可能感兴趣的文章
Linux运维基础命令
查看>>
使用PowerShell配置IP地址
查看>>
第十一章 MySQL运算符
查看>>
JAVA常见算法题(十七)
查看>>
GUI鼠标相关设置
查看>>
使用 <Iframe>实现跨域通信
查看>>
闭包--循序学习
查看>>
项目实战之集成邮件开发
查看>>
解决C3P0在Linux下Failed to get local InetAddress for VMID问题
查看>>
1531 山峰 【栈的应用】
查看>>
巧用美女照做微信吸粉,你会做吗?
查看>>
wcf学习总结《上》
查看>>
ERROR (ClientException)
查看>>
Load Balance 产品横向比较
查看>>
Java代理程序实现web方式管理邮件组成员
查看>>
【编译打包】tengine 1.5.1 SRPM
查看>>
看图说话:手动清除病毒文件流程
查看>>
一句话下拖库
查看>>
Deploy Office Communications Server 2007R2 Group Chat Server(二)
查看>>
在Cacti上实现MSN报警机制
查看>>