zoukankan      html  css  js  c++  java
  • CF 161D Distance in Tree【树DP】

    题目大意:给一棵树,求树上两点之间距离为K的点对数目。

    方程含义:

    dp(i,j)表示从已经遍历过的点到当前点i,路径长度为 j 的路径条数。因此,对于当前点,每当遍历了其中一个儿子节点的时候,首先统计当前情况下的结果,然后要更新dp(i, j)

    初始条件dp(i,0)= 1


    #include <cstdio>
    #include <cstring>
    #include <vector>
    using namespace std;
    #define N 50005
    vector<int> g[N];
    int dp[N][505], n, k, ans;
    
    void dfs(int now, int fa) {
        for (int i=1; i<=k; i++) dp[now][i] = 0;
        dp[now][0] = 1;
    
        int u;
        for (int i=0; i<g[now].size(); i++) {
            u = g[now][i];
            if (u == fa) continue;
    
            dfs(u, now);
            for (int j=0; j<k; j++) ans += dp[u][j]*dp[now][k-j-1]; 
            for (int j=1; j<=k; j++) dp[now][j] += dp[u][j-1];   //更新当前的值
        }
    }
    int main() {
        scanf("%d%d", &n, &k);
    
        int a, b;
        for (int i=1; i<n; i++) {
            scanf("%d%d", &a, &b);
            g[a].push_back(b);
            g[b].push_back(a);
        }
    
        ans = 0;
        dfs(1, 0);
    
        printf("%d
    ", ans);
    
        return 0;
    }
    


  • 相关阅读:
    打造自定义 eslint
    二叉树(三): 二叉查找树
    二叉树(二): 补充
    二叉树(一): 遍历
    redux 源码浅析
    react-redux 源码浅析
    WebComponents使用以及思考
    SHELL 语法以及实例
    React-Native 原生 APP 更新
    关于 cdn 在项目中的使用
  • 原文地址:https://www.cnblogs.com/riskyer/p/3217687.html
Copyright © 2011-2022 走看看