codeforces 161 D. Distance in Tree(树形dp)
题目链接:http://codeforces.com/problemset/problem/161/D
题意:给出一个树,问树上点到点的距离为k的一共有几个。
一道简单的树形dp,算是一个基础题。
设dp[i][len]表示i为根距离为len的一共有几个点。
一般的树形dp都是先dfs然后再更新dp的值,注意按这样写就行了。而且一般的树形dp都是设dp[i][k]i为根,k为条件。
void dfs(int u , int pre) {
int len = vc[u].size();
dp[u][0] = 1;
for(int i = 0 ; i < len ; i++) {
int v = vc[u][i];
if(v == pre)
continue;
dfs(v , u);
for(int j = 0 ; j < k ; j++) {
ans += dp[v][j] * dp[u][k - j - 1];
}
for(int j = 1 ; j <= k ; j++) {
dp[u][j] += dp[v][j - 1];
}
}
}
#include <iostream>
#include <cstring>
#include <cstdio>
#include <vector>
using namespace std;
const int M = 5e4 + 10;
vector<int>vc[M];
int dp[M][510];
int n , k , x , y , ans;
void dfs(int u , int pre) {
int len = vc[u].size();
dp[u][0] = 1;
for(int i = 0 ; i < len ; i++) {
int v = vc[u][i];
if(v == pre)
continue;
dfs(v , u);
for(int j = 0 ; j < k ; j++) {
ans += dp[v][j] * dp[u][k - j - 1];
}
for(int j = 1 ; j <= k ; j++) {
dp[u][j] += dp[v][j - 1];
}
}
}
int main() {
scanf("%d%d" , &n , &k);
for(int i = 0 ; i < n - 1 ; i++) {
scanf("%d%d" , &x , &y);
vc[x].push_back(y);
vc[y].push_back(x);
}
memset(dp , 0 , sizeof(dp));
ans = 0;
dfs(1 , 0);
printf("%d\n" , ans);
return 0;
}
codeforces 161 D. Distance in Tree(树形dp)的更多相关文章
- Codeforces 161 D. Distance in Tree (树dp)
题目链接:http://codeforces.com/problemset/problem/161/D 题意: 给你一棵树,问你有多少对点的距离为k. 思路: dp[i][j]表示离i节点距离为j的点 ...
- codeforces 161D Distance in Tree 树形dp
题目链接: http://codeforces.com/contest/161/problem/D D. Distance in Tree time limit per test 3 secondsm ...
- VK Cup 2012 Round 1 D. Distance in Tree (树形dp)
题目:http://codeforces.com/problemset/problem/161/D 题意:给你一棵树,问你两点之间的距离正好等于k的有多少个 思路:这个题目的内存限制首先大一倍,他有5 ...
- CF 161D Distance in Tree 树形DP
一棵树,边长都是1,问这棵树有多少点对的距离刚好为k 令tree(i)表示以i为根的子树 dp[i][j][1]:在tree(i)中,经过节点i,长度为j,其中一个端点为i的路径的个数dp[i][j] ...
- 熟练剖分(tree) 树形DP
熟练剖分(tree) 树形DP 题目描述 题目传送门 分析 我们设\(f[i][j]\)为以\(i\)为根节点的子树中最坏时间复杂度小于等于\(j\)的概率 设\(g[i][j]\)为当前扫到的以\( ...
- Codeforces Round #551 (Div. 2) D. Serval and Rooted Tree (树形dp)
题目:http://codeforces.com/contest/1153/problem/D 题意:给你一棵树,每个节点有一个操作,0代表取子节点中最小的那个值,1代表取子节点中最大的值,叶子节点的 ...
- Codeforces Round #263 Div.1 B Appleman and Tree --树形DP【转】
题意:给了一棵树以及每个节点的颜色,1代表黑,0代表白,求将这棵树拆成k棵树,使得每棵树恰好有一个黑色节点的方法数 解法:树形DP问题.定义: dp[u][0]表示以u为根的子树对父亲的贡献为0 dp ...
- codeforces Round #263(div2) D. Appleman and Tree 树形dp
题意: 给出一棵树,每个节点都被标记了黑或白色,要求把这棵树的其中k条变切换,划分成k+1棵子树,每颗子树必须有1个黑色节点,求有多少种划分方法. 题解: 树形dp dp[x][0]表示是以x为根的树 ...
- 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: ...
随机推荐
- 使用RedisMQ 做一次分布式改造
引言 熟悉TPL Dataflow博文的朋友可能记得这是个单体程序,使用TPL Dataflow 处理工作流任务, 在使用Docker部署的过程中, 有一个问题一直无法回避: 在单体程序部署的瞬间会有 ...
- NS3中一些难以理解的常数
摘要:在NS3的学习中,PHY MAC中总有一些常数,需要理解才能修改.如帧间间隔等.那么,本文做个简单分析,帮助大家理解.针对802.11标准中MAC协议. void WifiMac::Conf ...
- Spring AOP JDK动态代理与CGLib动态代理区别
静态代理与动态代理 静态代理 代理模式 (1)代理模式是常用设计模式的一种,我们在软件设计时常用的代理一般是指静态代理,也就是在代码中显式指定的代理. (2)静态代理由 业务实现类.业务代理类 两部分 ...
- 提取html内的文字1
public static string StripHTML(string strHtml) { string [] aryReg ={ @"<scrip ...
- Windows Server 2008创建域环境
介绍一下域环境搭建,域主要用于中大型企业,小型企业计算机数量不多,而中大型企业计算机比较多,使用域可以方便管理,安全性也比在工作组中安全 1.安装完操作系统默认都属于WORKGROUP工作组. 2.安 ...
- 记录一次Git解决CONFLICT冲突
目录 记录一次Git解决CONFLICT冲突 1.CONFLICT产生的原因 2.Git正确的LIANGZHONG 使用流程 2.1 暂存,拉取,恢复暂存,合并(如果有冲突),提交,推送 2.2 将本 ...
- thinkPHP 获得当前请求的全部常量信息
tp框架提供了常量: http://网址/shop/index.php/分组/控制器/操作方法/名称1/值/名称2/值 __MODULE__: 路由地址分组信息 (/shop/index.php/分组 ...
- 数据结构与算法—二叉排序树(java)
前言 前面介绍学习的大多是线性表相关的内容,把指针搞懂后其实也没有什么难度.规则相对是简单的. 再数据结构中树.图才是数据结构标志性产物,(线性表大多都现成api可以使用),因为树的难度相比线性表大一 ...
- centos6.8启动防火墙的艰辛过程
首先我的/etc/sysconfig/iptables文件没有. 解决办法: 1.任意运行一条iptables防火墙规则配置命令: iptables -P OUTPUT ACCEPT 2.对iptab ...
- 修改jdk注册表
如果是新增jdk的话就选中java Development kit 文件夹右击新建,然后把属性配置上就可以