Distance in Tree 树形dp练习(树中两点距离为k的数量板子)

news/2024/12/11 16:42:13/

Distance in Tree

题面翻译

题目大意

输入点数为 N N N一棵树

求树上长度恰好为 K K K的路径个数

输入格式

第一行两个数字 N , K N,K N,K,如题意

接下来的 N − 1 N-1 N1行中,每行两个整数 u , v u,v u,v表示一条树边 ( u , v ) (u,v) (u,v)

输出格式

一个整数 a n s ans ans,如题意

C o d e f o r c e s Codeforces Codeforces上提交时记得用 % I 64 d \%I64d %I64d哦.QwQ

数据范围

1 ≤ n ≤ 50000 1 \leq n \leq 50000 1n50000

1 ≤ k ≤ 500 1 \leq k \leq 500 1k500

样例输入 #1

5 2
1 2
2 3
3 4
2 5

样例输出 #1

4

样例 #2

样例输入 #2

5 3
1 2
2 3
3 4
4 5

样例输出 #2

2

提示

In the first sample the pairs of vertexes at distance 2 from each other are (1, 3), (1, 5), (3, 5) and (2, 4).

思路:根据数据范围,我没可以设置一个二维数组dp[i][j], 表示以i为根节点,到i的距离为j时的方案数量,那么我们的方案数量s可以表示为s += dp[u][j] * dp[v][k - 1 - j], 我们只需要求到i的距离为k - 1即可,因为i本身也是一个节点,做一下树形dp即可

#include<bits/stdc++.h>using namespace std;typedef long long ll;
typedef pair<ll, ll>PII;
const int N = 2e5 + 10;
const int MOD = 998244353;
const int INF = 0X3F3F3F3F;
const int dx[] = {-1, 1, 0, 0, -1, -1, +1, +1};
const int dy[] = {0, 0, -1, 1, -1, +1, -1, +1};
const int M = 1e9 + 7;//树中两点距离为k的数量
ll dp[50010][510];//以u为根到u距离为j时的方案数量
vector<ll>ed[N];
int n, k;
ll s;void dfs(int u, int fa)
{dp[u][0] = 1;for(auto v : ed[u]){if(v == fa) continue;dfs(v, u);s += dp[v][k - 1];for(int i = 1; i <= k; i ++){if(i != k)s += dp[u][i] * dp[v][k - i - 1];dp[u][i] += dp[v][i - 1];}}
}
int main()
{cin >> n >> k;for(int i = 1; i <= n - 1; i ++){int u, v;cin >> u >> v;ed[u].push_back(v);ed[v].push_back(u);}dfs(1, 0);cout << s << endl;
}

PS:这题还可以用点分治,等以后学了在来补上qwq


http://www.ppmy.cn/news/1554272.html

相关文章

k8s折腾笔记

k8s折腾笔记 k8s安装、部署、运行demo1.系统环境2.开始安装2.1 先从master节点开始2.2 worker节点 3.遇到的问题4.集群demo k8s安装、部署、运行demo 1.系统环境 两台服务器&#xff0c;都是ubuntu22版本&#xff0c; 一台2核4g&#xff0c;作为master节点 一台2核2g&#xf…

Hyper-V创建虚拟机配置IP等网络配置原理(Linux、Windows为例)

Hyper-V创建虚拟机配置IP等网络配置原理&#xff08;Linux、Windows为例&#xff09; 大家知道Windows系统里面内置了Hyper-V管理器&#xff0c;用来创建和管理本地虚拟机环境。今天我创建了两台虚拟机&#xff0c;一台是CentOS7.9&#xff08;Linux&#xff09;&#xff0c;另…

使用 Streamlit +gpt-4o实现有界面的图片内容分析

在上一篇利用gpt-4o分析图像的基础上&#xff0c;进一步将基于 Python 的 Streamlit 库&#xff0c;结合 OpenAI 的 API&#xff0c;构建一个简洁易用的有界面图片内容分析应用。通过该应用&#xff0c;用户可以轻松浏览本地图片&#xff0c;并获取图片的详细描述。 调用gpt-4o…

springboot系列--拦截器加载原理

一、拦截器加载原理 拦截器是在容器启动时&#xff0c;就创建并加载好&#xff0c;此时并未放入拦截器链中&#xff0c;只是放在一个拦截器集合当中&#xff0c;当一个请求进来之后&#xff0c;会通过匹配路径&#xff0c;查看是否有命中集合中的拦截器的拦截路径&#xff0c;如…

安全架构评审

安全架构评审 1.概述2.安全设计原则3.美团安全架构评审模型安全需求分析架构review攻击面分析和威胁建模攻击面分析威胁列表 1.概述 完整的安全评审会包含安全架构评审、安全代码审核和安全测试三个手段 安全架构评审聚焦于探寻安全设计中的漏洞&#xff0c;以宏观视野全面考…

IoTDB Allocate WAL Buffer Fail Because out of memory

问题及现象 时序数据库 IoTDB 集群报错&#xff1a; The write is rejected because the wal directory size has reached the threshold 53687091200 bytes. You may need to adjust the flush policy of the storage storageengine or the IoTConsensus synchronization pa…

鼠标右键单击Git Bash here不可用

最近在学习git时突然发现右键的git bash没反应&#xff0c;但是去点击应用图标就能正常运行&#xff0c;通常是因为你在安装git之后改变了它的目录名称或者位置&#xff0c;我就是因为安装后改变了一个文件夹的文件名导致不可用 在安装git时系统会默认给鼠标右键选项的git Bas…

菜鸟每日刷牛客HJ2

菜鸟每日刷牛客 HJ2 计算某字符出现次数 描述 写出一个程序&#xff0c;接受一个由字母、数字和空格组成的字符串&#xff0c;和一个字符&#xff0c;然后输出输入字符串中该字符的出现次数。&#xff08;不区分大小写字母&#xff09; 数据范围&#xff1a; 1≤n≤1000 输…