码迷,mamicode.com
首页 > 其他好文 > 详细

D. Distance in Tree(树型Dp计数)

时间:2020-05-04 17:28:14      阅读:69      评论:0      收藏:0      [点我收藏+]

标签:==   name   bit   inline   str   ons   好的   深度   int   

\(其实思路都能想到一点,就是去重这里特别麻烦,没有好的思路。\)

\(设dp[i][j]为以i为根深度为j的节点数量\)

\(dp[parent][j]=\sum{dp[son][j-1]}\)

\(然后把每个节点作为转折点求答案\)

#include <bits/stdc++.h>
using namespace std;
const int maxn=50009;
struct p{
	int to,nxt;
}d[maxn*2];
int n,k,deep[maxn],head[maxn*2],cnt=1,l,r,ans;
void add(int u,int v){
	d[cnt].nxt=head[u],d[cnt].to=v,head[u]=cnt++;
}
int f[maxn][509];//u为顶点往下延申长度k 
void dfs(int now,int fa)
{
	f[now][0]=1;
	for(int i=head[now];i;i=d[i].nxt)
	{
		if(fa==d[i].to)	continue;
		dfs(d[i].to,now);
		for(int j=0;j<k;j++)
			ans+=f[now][j]*f[d[i].to][k-j-1];
		for(int j=1;j<=k;j++)
			f[now][j]+=f[d[i].to][j-1];
	}
}
int main()
{
	scanf("%d%d",&n,&k);
	for(int i=1;i<n;i++)
	{
		scanf("%d%d",&l,&r);
		add(l,r);add(r,l);
	}
	dfs(1,0);
	cout<<ans;
}

D. Distance in Tree(树型Dp计数)

标签:==   name   bit   inline   str   ons   好的   深度   int   

原文地址:https://www.cnblogs.com/iss-ue/p/12826977.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!