问题描述
ZYB有一颗N个节点的树,现在他希望你对于每一个点,求出离每个点距离不超过KK的点的个数.

两个点(x,y)在树上的距离定义为两个点树上最短路径经过的边数,

为了节约读入和输出的时间,我们采用如下方式进行读入输出:

读入:读入两个数A,B,令fai​​为节点i的父亲,fa​1​​=0;fa​i​​=(A∗i+B)%(i−1)+1,i∈[2,N] .

输出:输出时只需输出N个点的答案的xor和即可。
输入描述
第一行一个整数TT表示数据组数。

接下来每组数据:

 一行四个正整数N,K,A,B.

 最终数据中只有两组N≥100000。

1≤T≤5,5000001≤N≤500000,1≤K≤10,10000001≤A,B≤1000000
输出描述
T行每行一个整数表示答案.
输入样例
1
3 1 1 1
输出样例
3

re了好多好多次。注意数据范围A*i+B是会超int的!

距离一个点距离为k的值就用距离这个点距离为1的点更新。可能是该点的儿子,也可能是该点的父亲。

儿子节点直接算没有什么需要注意的地方。然后 与父亲结点距离为k-1的节点的数量减去该节点贡献的部分 就是该节点经过父亲结点符合要求结点的数量。

父亲结点有个坑。。。首先,需要先算父亲结点再算儿子节点,其次更新时要倒着更新。。。具体看代码吧。。。

#include <bits/stdc++.h>

using namespace std;

typedef unsigned int ut;
typedef long long ll; const int N = 500005;
const int K = 12; struct Edge {
int to, next;
} edge[N];
int head[N];
int cnt_edge;
void add_edge(int u, int v)
{
edge[cnt_edge].to = v;
edge[cnt_edge].next = head[u];
head[u] = cnt_edge++;
} int dp[N][K];
int fa[N]; int n, k; void dfs(int u)
{
dp[u][0] = 1;
for (int i = head[u]; i != -1; i = edge[i].next)
{
int v = edge[i].to;
dfs(v);
for (int j = 1; j <= k; ++j)
{
dp[u][j] += dp[v][j - 1];
}
}
} void solve(int u)
{
if (u != 1)
{
for (int j = k; j >= 2; --j)//这里需要注意 更新的方向!
{
dp[u][j] += dp[ fa[u] ][j - 1] - dp[u][j - 2];
}
dp[u][1]++;
} for (int i = head[u]; i != -1; i = edge[i].next)
{
int v = edge[i].to;
solve(v);
}
} int main()
{
int t;
scanf("%d", &t);
while (t--)
{
int a, b; scanf("%d%d%d%d", &n, &k, &a, &b);
cnt_edge = 0;
memset(dp, 0, sizeof dp);
memset(head, -1, sizeof head);
for (int i = 2; i <= n; ++i)
{
int f = ((ll)a * i + b) % (i - 1) + 1;
add_edge(f, i);
fa[i] = f;
}
dfs(1);
solve(1);
int ans = 0;
for (int i = 1; i <= n; ++i)
{
int tmp = 0;
for (int j = 0; j <= k; ++j)
{
tmp += dp[i][j];
}
ans ^= tmp;
}
printf("%d\n", ans);
}
return 0;
}

  

hdu5593--ZYB's Tree(树形dp)的更多相关文章

  1. hdu5593/ZYB's Tree 树形dp

    ZYB's Tree    Memory Limit: 131072/131072 K (Java/Others) 问题描述 ZYBZYB有一颗NN个节点的树,现在他希望你对于每一个点,求出离每个点距 ...

  2. HDU5593 ZYB's Tree 树形DP +分治

    感觉其实就是树分治,一次BC的题,感觉这次题目质量比较高,仅代表蒟蒻的看法 一次DFS获取每个点到子树的距离不大于K的点的个数, 然后一遍BFS获取从每个点父亲不大于K的的个数,层层扩展,还是想说 其 ...

  3. 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 ...

  4. HDU 5593 ZYB's Tree 树形dp

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5593 题意: http://bestcoder.hdu.edu.cn/contests/contes ...

  5. 熟练剖分(tree) 树形DP

    熟练剖分(tree) 树形DP 题目描述 题目传送门 分析 我们设\(f[i][j]\)为以\(i\)为根节点的子树中最坏时间复杂度小于等于\(j\)的概率 设\(g[i][j]\)为当前扫到的以\( ...

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

  7. CF 461B Appleman and Tree 树形DP

    Appleman has a tree with n vertices. Some of the vertices (at least one) are colored black and other ...

  8. codeforces 161D Distance in Tree 树形dp

    题目链接: http://codeforces.com/contest/161/problem/D D. Distance in Tree time limit per test 3 secondsm ...

  9. hdu6035 Colorful Tree 树形dp 给定一棵树,每个节点有一个颜色值。定义每条路径的值为经过的节点的不同颜色数。求所有路径的值和。

    /** 题目:hdu6035 Colorful Tree 链接:http://acm.hdu.edu.cn/showproblem.php?pid=6035 题意:给定一棵树,每个节点有一个颜色值.定 ...

  10. 5.10 省选模拟赛 tree 树形dp 逆元

    LINK:tree 整场比赛看起来最不可做 确是最简单的题目. 感觉很难写 不过单独考虑某个点 容易想到树形dp的状态. 设f[x]表示以x为根的子树内有黑边的方案数. 白边方案只有一种所以不用记录. ...

随机推荐

  1. cocos2dx输出信息重定向到控制台

    重定向输出到控制台,方便调试,代码: // uncomment below line, open debug console #define USE_WIN32_CONSOLE int APIENTR ...

  2. 敏捷开发的特点(转自MBAlib)

    敏捷开发的特点 敏捷方法主要有两个特点,这也是其区别于其他方法,尤其是重型方法的最主要特征: (1)敏捷开发方法是“适应性”(Adaptive)而非“预设性” (Predictive). 这里说的预设 ...

  3. java.util.List

    /* * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved. * ORACLE PROPRIETA ...

  4. java.sql.SQLException: Io 异常: Connection refused(DESCRIPTION=(TMP=)(VSNNUM=186646784)(ERR=12505)(ERR

    dbc 链接orcal出错 java.sql.SQLException: Io 异常: Connection refused(DESCRIPTION=(TMP=)(VSNNUM=186646784)( ...

  5. UI/UE对个性化推荐的影响

            用户界面,用户体验.         在创建网站选择色调时,大多数企业想到的是美观.其实,颜色所起到的作用远超出人们的想象.         关于颜色与购买习惯的心理学书籍比比皆是,下 ...

  6. 推荐一本书《深入理解PHP内核》

    <深入理解PHP内核> 在线网址:http://www.php-internals.com/

  7. routes.IgnoreRoute("{resource}.axd/{*pathInfo}")作用

    {resource}.axd 表示后缀名为.axd所有资源 如webresource.axd{*pathInfo} 表示所有路径 作用:使路由系统忽略处理ASP.NET的Web资源文件(WebReso ...

  8. MongoDB实战指南(四):MongoDB的Journaling日志功能

    mongoDB的Journaling日志功能与常见的log日志是不一样的,mongoDB也有log日志,它只是简单记录了数据库在服务器上的启动信息.慢查询记录.数据库异常信息.客户端与数据库服务器连接 ...

  9. 栈和队列的面试题Java

    栈和队列: 面试的时候,栈和队列经常会成对出现来考察.本文包含栈和队列的如下考试内容: (1)栈的创建 (2)队列的创建 (3)两个栈实现一个队列 (4)两个队列实现一个栈 (5)设计含最小函数min ...

  10. 【HDOJ】1254 推箱子

    来一发搜索.数据量比较小,这么玩儿都能ac.搞个优先队列.先扫描从起点可以到达箱子的上下左右中哪些位置,并针对这些位置进行bfs.所谓推,就是箱子和人同向移动一个单位.bfs的时候注意一些限制条件就好 ...