CodeForces 160D - Distance in Tree 树型DP
2013-07-22 20:07
369 查看
题目给了512MB的空间....用dp[k][i]代表以k为起点...往下面走(走直的不打岔)i步能有多少方案....在更新dp[k][i]过程中同时统计答案..
Program:
Program:
#include<iostream> #include<queue> #include<stack> #include<stdio.h> #include<string.h> #include<algorithm> #include<cmath> #define ll long long #define oo 1000000007 #define MAXN 50005 using namespace std; struct node { int x,y,next; }line[MAXN*2]; int n,K,dp[MAXN][502],_next[MAXN]; bool used[MAXN]; ll ans; void addline(int x,int y,int m) { line[m].next=_next[x],_next[x]=m; line[m].x=x,line[m].y=y; return; } void dfs(int x) { int i,j,k; k=_next[x]; dp[x][0]=1; while (k) { if (!used[line[k].y]) { used[line[k].y]=true; dfs(line[k].y); for (i=K;i>=1;i--) ans+=dp[x][K-i]*dp[line[k].y][i-1]; for (i=K;i>=1;i--) dp[x][i]+=dp[line[k].y][i-1]; } k=line[k].next; } return; } int main() { int i,j; while (~scanf("%d%d",&n,&K)) { memset(_next,0,sizeof(_next)); for (i=1;i<n;i++) { int x,y; scanf("%d%d",&x,&y); addline(x,y,i*2-1); addline(y,x,i*2); } memset(used,false,sizeof(used)); memset(dp,0,sizeof(dp)); used[1]=true; ans=0; dfs(1); printf("%I64d\n",ans); } return 0; }
相关文章推荐
- CodeForces 160D - Distance in Tree 树形DP
- CodeForces 161D [Distance in Tree] 点分治
- codeforces 161D - Distance in Tree(树形dp)
- [codeforces 161D] Distance in Tree(树的点分治)
- [CodeForces 161D] Distance in Tree
- codeforces 161D D. Distance in Tree(树形dp)
- Codeforces 161 D. Distance in Tree (树dp)
- Codeforces 161 D Distance in Tree 树形DP
- codeforces 161D - Distance in Tree 树状DP
- 【树形dp】VK Cup 2012 Round 1 D. Distance in Tree
- codeforces 792D - Paths in a Complete Binary Tree
- 【树形dp】Distance in Tree
- [树形DP]VK Cup 2012 Round 1 D. Distance in Tree
- codeforces D. Distance in Tree
- Recover Binary Search Tree & Edit Distance & Reverse Nodes in k-Group
- Codeforces 914E Palindromes in a Tree 点分治
- 【dp+dfs】VK Cup 2012 Round 1-D. Distance in Tree
- find distance between two nodes in a binary tree
- 【树形dp统计距离为k的点对】VK Cup 2012 Round 1 D. Distance in Tree
- codeforces 792D——Paths in a Complete Binary Tree(二叉树,数学)