zoukankan      html  css  js  c++  java
  • Codeforces 161D

    树形DP:

    要求找出树上距离为k的点的对数;

    对于每个节点,经过这个节点的符合条件的的点有两种:

    第一种:距离他为i的儿子和他爸爸中距离他爸爸为k-i-1;(不是符合的点对中的一个)

    第二种:他儿子中距离为其儿子为k-1的点;(此节点为符合条件的点对中的一个)

     1 #include <cstdio>
     2 #include <vector>
     3 #define N 50009
     4 using namespace std;
     5 vector<int>vec[N];
     6 int dp[N][505];
     7 long long ans;
     8 void dfs(int x,int f,int k)
     9 {
    10     dp[x][0]=1;
    11     for(int i=0;i<vec[x].size();i++)
    12     {
    13         int q=vec[x][i];
    14         if(q==f)continue;
    15         dfs(q,x,k);
    16         for(int j=0;j<k;j++)
    17             ans+=dp[q][j]*dp[x][k-j-1];
    18         for(int j=1;j<k;j++)
    19             dp[x][j]+=dp[q][j-1];
    20     }
    21     ans+=dp[x][k];
    22 }
    23 int main()
    24 {
    25     int n,k,x,y;
    26     scanf("%d%d",&n,&k);
    27     for(int i=0;i<n-1;i++)
    28     {
    29         scanf("%d%d",&x,&y);
    30         vec[x].push_back(y);
    31         vec[y].push_back(x);
    32     }
    33     ans=0;
    34     dfs(1,0,k);
    35     printf("%lld",ans);
    36     return 0;
    37 }
    View Code
  • 相关阅读:
    JQ之html,text,val
    JQuery之编写弹窗
    DOM操作HTML元素属性
    DOM操作表格
    无缝滚动效果
    Date日期基础
    CISSP备考总结
    CISA考试大纲即将更新
    备考CISSP
    cisa备考体会
  • 原文地址:https://www.cnblogs.com/yours1103/p/3354477.html
Copyright © 2011-2022 走看看