一棵树,边长都是1,问这棵树有多少点对的距离刚好为k

令tree(i)表示以i为根的子树

dp[i][j][1]:在tree(i)中,经过节点i,长度为j,其中一个端点为i的路径的个数
dp[i][j][0]:在tree(i)中,经过节点i,长度为j,端点不在i的路径的个数

则目标:∑(dp[i][k][0]+dp[i][k][1])
初始化:dp[i][0][1]=1,其余为0

siz[i]:tree(i)中,i与离i最远的点的距离
递推:
dp[i][j][0]+=dp[i][j-l][1]*dp[soni][l-1][1]
dp[i][j][1]=∑dp[soni][j-1][1]

注意:在更新每一个dp[i]时,先更新dp[i][j][0],再更新dp[i][j][1]

 #include<cstdio>
#include<cstring>
#include<iostream> using namespace std; const int maxn=+;
const int maxk=;
#define LL long long inline int max(int a,int b)
{
return a>b?a:b;
} inline int min(int a,int b)
{
return a<b?a:b;
} LL dp[maxn][maxk][];
int siz[maxn];
struct Edge
{
int to,next;
};
Edge edge[maxn<<];
int head[maxn];
int tot;
int k; void init()
{
memset(head,-,sizeof head);
tot=;
memset(dp,,sizeof dp);
} void addedge(int u,int v)
{
edge[tot].to=v;
edge[tot].next=head[u];
head[u]=tot++;
} void solve(int ,int );
void dfs(int ,int ); int main()
{
init();
int n;
scanf("%d %d",&n,&k);
for(int i=;i<n;i++)
{
int u,v;
scanf("%d %d",&u,&v);
addedge(u,v);
addedge(v,u);
}
solve(n,k);
return ;
} void solve(int n,int k)
{
dfs(,);
LL ans=;
for(int i=;i<=n;i++)
{
ans+=(dp[i][k][]+dp[i][k][]);
}
cout<<ans<<endl;
return ;
} void dfs(int u,int pre)
{
dp[u][][]=;
siz[u]=;
for(int i=head[u];~i;i=edge[i].next)
{
int v=edge[i].to;
if(v==pre)
continue;
dfs(v,u);
for(int l=;l<=siz[v]+;l++)
{
for(int j=l+;j<=siz[u]+l;j++)
{
if(j>k)
continue;
dp[u][j][]+=dp[u][j-l][]*dp[v][l-][];
}
}
for(int j=;j<=siz[v]+;j++)
dp[u][j][]+=dp[v][j-][];
siz[u]=max(siz[u],siz[v]+);
siz[u]=min(siz[u],k);
}
}

最新文章

  1. Win10商店东方财富网 UWP版更新,支持平板,PC,手机
  2. 使用jspatch进行热修复的实战总结
  3. maven项目管理构建
  4. git管理maven项目实现
  5. PHP7安装问题解决
  6. NGUI学习笔记(二):基础笔记
  7. 真机iOS SDK升级后xcode不能进行真机调试 怎么办
  8. Javascript学习1 - Javascript中的类型对象
  9. Varnish+Xcache构建高性能WEB构架初探
  10. Windows MDI(Multiple-Document Interface)
  11. Json安全
  12. I2C总线通讯协议
  13. easyui的下拉框combox动态复赋值显示在前端
  14. ogg BR – BOUNDED RECOVERY 测试案例
  15. 搭建ELK日志分析系统
  16. centos 7.4安装教程
  17. 【Alpha 冲刺】 3/12
  18. Asp.net WebApi版本控制
  19. 【Pyton】【小甲鱼】永久存储:腌制一缸美味的泡菜
  20. 线段树+单调栈+前缀和--2019icpc南昌网络赛I

热门文章

  1. HTML5学堂 全新的HTML5/前端技术分享平台
  2. [luogu P2647] 最大收益(贪心+dp)
  3. Linux系统编程@终端IO
  4. 黑马程序员——JAVA基础之List集合
  5. javascript闭包,arguments和prototype
  6. XunSearch(讯搜)的使用教程步骤
  7. snort-2.9.7.0源码安装过程
  8. 关于c语言char类型输入输出的一个bug
  9. OpenJudge计算概论-求满足条件的3位数
  10. Linux-LNMP LAMP LNMPA