首页 > 其他分享 >D. Distance in Tree

D. Distance in Tree

时间:2024-04-29 15:03:12浏览次数:22  
标签:Distance int Tree al dfs ++ 节点 dp

https://codeforces.com/problemset/problem/161/D

题意:给一棵树,求树上距离为k的节点对的数量。

思路:树上dp,随便找个节点开始遍历。然后枚举当前点的距离为i的节点数与当前点的孩子节点距离为k - i - 1的节点数相乘。

总结:想到了树上dp,也想到了这个思路,但是没想到相乘跟开始遍历的节点值,以及为什么这种遍历可以保证节点对不重复。

void solve(){
    int n, k;
    cin >> n >> k;

    vector<vector<int>> al(n);
    for (int i = 0; i < n - 1; ++i){
        int u, v;
        cin >> u >> v;
        u --;
        v --;
        al[u].emplace_back(v);
        al[v].emplace_back(u);
    }

    long long ans = 0;
    vector<vector<long long>> dp(n, vector<long long>(k, 0ll));
    function<void(int, int)> dfs = [&](int u, int p){
        dp[u][0] = 1;
        for (const int& v : al[u]){
            if (v != p){
                dfs(v, u);
                for (int i = 0; i < k; ++i){
                    ans += dp[u][i] * dp[v][k - i - 1];
                }
                for (int i = 1; i < k; ++i){
                    dp[u][i] += dp[v][i - 1];
                }
            }
        }
    };

    dfs(0, -1);

    cout << ans << '\n';
}

标签:Distance,int,Tree,al,dfs,++,节点,dp
From: https://www.cnblogs.com/yxcblogs/p/18165712

相关文章

  • Tree-shaking ESModule
     一、需求背景与收益Tree-shaking剪裁无用js与css,目前在dc组实现,首页效果如下:1、原文件5.19M,优化后2.61M2、gzip文件988.25KB, 优化后665.63KB3、Js文件减少三分之一,项目越久收益越高4、运行速度和用户体验都会提升5、Lighthouse性能评分提升大概4-8分6、属于攻坚技术......
  • ant-design Tree树形控件,通过expandedKeys控制收缩或折叠失效
    一、概述AntDesign的树形组件Tree,通过属性expandedKeys手动控制组件的展开和收缩时,点击节点后更新expandedKeys属性值可以正常展开,再点击左侧三角形小图标时(onExpand)却不能收缩了。  二、问题分析a.根据以往经验,出现keys的问题,一般是由key的数据重复或类型(尤其Number......
  • CuOI R1 - Distance
    题目背景天地间是一望无际的洁白。她来了,但遥不可及。题目描述你和Cuset处在一条数轴上,该数轴只有整点,你的位置是$s_1$,她的位置是$s_0$。你想要靠近她,但因为该空间的不稳定,相邻整点之间的空间被扭曲,伸长出一片直线空间,即相邻整点之间的距离不再是$1$了,一片伸长空......
  • AtCoder Beginner Contest 351 E - Jump Distance Sum 切比雪夫距离与曼哈顿距离的转
    先说知识点。曼哈顿距离:横纵坐标距离差的绝对值的和,即|X1-X2|+|Y1-Y2|,离(0,0)点曼哈顿距离为1的点形成的是一个旋转45度后的正方形切比雪夫距离:横纵坐标距离差的绝对值的最大值,即max(|X1-X2|,|Y1-Y2|),离(0,0)点切比雪夫距离为1的点形成的是一个不旋转的正方形曼哈......
  • [Over-Distance] Ubuntu 24.04 LTS Update
    Ubuntu24.04LTS更新内容(简体中文)Ubuntu24.04LTS,代号NobleNumbat,带来了一系列引人注目的更新与改进。以下是详细的更新内容列举:一、内核与系统性能优化Ubuntu24.04LTS搭载了Linux6.8LTS内核版本,带来了显著的性能提升:笔记本电脑硬件兼容性增强,使得系统在各种笔记本平......
  • LSM Tree 简笔
    LSMTree总览写流程:就地写,写入memTable当activememTable满后,转变为readOnlymemTable,在合适时机flush入磁盘。当前level数据满后,进行归并操作,把数据排序,去重后转入下一level。背景介绍两种场景,读多写少,写多读少。原地写写操作:找到老数据所在位置,更新,IO操作,慢。......
  • vue3使用echarts的tree,自己写事件进行分页
    vue3使用echarts的tree,自己写事件进行分页  先到npmjs官网查看当前使用最多的版本https://www.npmjs.com/package/echarts 看了下5.5.0用的最多[email protected] 以下的demo(“@/flare”是后面的flare.json数据)<template><divid="chart-container"></div......
  • CF1709E XOR Tree
    linkSolution:PART1:转化首先套路地预处理出每个节点到根节点(\(1\)号节点)路径上的点权异或和\(w[u]\)。可以发现题意容易转化为:给定一棵\(n\)个节点的树,问你最少可以把它分成多少个联通块,使得每个连通块中的节点两两路径上的异或和不为0。易知对于一个节点,若它要被割......
  • CF771C Bear and Tree Jumps
    题目大意:给定一棵有\(n\)个节点的树,要你统计\(\sum_{1\lex\ley\len}{dist(x,y)/k}\)(\(dist(x,y)\)表示\(x\)到\(y\)的距离)\(n\le2\times10^5,k\le5\)解法:一道换根\(dp\)套路题。首先看到树上统计问题,考虑树形\(dp\),那么我们设\(g(u)\)为以\(......
  • POI2012ODL-Distance
    POI#Year2012#数学记\(cnt(x)\)为\(x\)的因子个数\(d(i,j)=cnt(a_i)+cnt(a_j)-2cnt(gcd(i,j))\)枚举\(i\),剩下的时间复杂度可以枚举\(gcd\),考虑此时应该贪心的取\(cnt(a_j)\)最小的\(j\)这样不能保证枚举的\(gcd=gcd(a_i,a_j)\)但是在\(gcd=gcd(a_i,a_j)\)......