CF771F : Bear and Isomorphic Points

news/2025/3/19 13:44:48/文章来源:https://www.cnblogs.com/terrave/p/18780879

CF771F : Bear and Isomorphic Points

题目传送门

题意:

在一棵树上,每一步最多走 k 步,问走完所有点对最少需要多少步

思路 && 分析:

设想一个这样的情况,树上任意两点之间的距离都是 k 的倍数,在这种情况下答案就是将所有的点对距离之和加起来(这个只需要一个简单的的 dfs 就能求出)在除以 k,但是这种情况显然只有在 k 为 1 时才会出现。
所以如果我们可以求出两个点之间的距离需要补多少就能被 k 整除(意思就是假如有两个点之间距离为 7, k 为 3,这种情况就要补 2。)在加上所有点的距离之和后除以 k 就会得到我们要的答案
具体见代码如下

#include<iostream>
#include<vector>
#include<algorithm>using namespace std;
typedef long long ll;
const int N = 200010;
vector<int> e[N];
// dp[i][j] 表示 i 的子树(下面写为 i 树)内有多少到根节点距离取余 m 为 j 的点
ll ans, dp[N][6];
// h 用来存每一个节点包括子树和自己有多少个点
int n, h[N], m;
void dfs(int u, int fa, int d){h[u] = 1;dp[u][d % m] = 1;for(auto s : e[u]){if(s == fa) continue;dfs(s, u, d + 1);//枚举组合 u 树内的节点与 s 内的节点for(int i = 0;i < m;i ++)for(int j = 0;j < m;j ++){//(i - d) + (j - d) --- (因为dp里的距离是到根节点的)// 这里 x 是两点之间的距离, y 即是要补的int x = (i + j - 2 * d) % m;int y = (m - x) % m;ans += 1LL * y * dp[u][i] * dp[s][j];}h[u] += h[s];for(int i = 0;i < m;i ++) dp[u][i] += dp[s][i];// 这里是原来的距离之和ans += 1LL * h[s] * (n - h[s]);}}
int main(){ios::sync_with_stdio(false);cin.tie(nullptr);cin >> n >> m;for(int i = 1;i < n;i ++){int x, y;cin >> x >> y;e[x].push_back(y);e[y].push_back(x);}dfs(1, 0, 0);cout << ans / m;return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/901500.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

tile

dsfTechnorati Tags: gjhgsdhttp://dfdfdfddfdfdfdsfdfdf

电视机顶盒刷机,更改固件包教程

这几天捣鼓了很久的刷机包,终于学会了怎么把已经弄好的刷机包,更改成自己想要的桌面。下面是我整理好的详细教程,本教程所需工具:刷机包大全、MLK软件、mumu模拟器 刷机包大全: 链接: https://pan.baidu.com/s/1G0on4sV9QmpxPXLUSN5ttQ?pwd=5279 提取码: 5279 一.确定机顶…

Java技术栈面试八股文:掌握这九大关键领域

Java基础:这是Java开发的基石,包括Java语言的基本语法、数据类型、控制结构、面向对象编程(OOP)概念(如类、对象、继承、封装、多态)、异常处理、集合框架等。掌握这些基础知识对于理解更高级的Java特性至关重要。Java Web基础:涉及Java在Web开发中的应用,包括Servlet、…

Unity —— SpriteAtlas + Include in Build

前言在使用atlas Sprite的过程中,会忍不住产生一个疑问,atlas是做什么用的,这个include in Build的含义是什么呢,以及它是否应该被勾选。网上查阅到了很多资源,有的说这个选项大胆勾选,有的说这个选项勾选完后图集打包后的纹理在游戏启动后,会一直常驻内存,需要自己做好…

2025预测:PLM系统集成AI的7种智能决策应用场景

随着科技的飞速发展,产品生命周期管理(PLM)系统与人工智能(AI)的集成正逐渐成为企业提升竞争力的关键因素。这种集成不仅能够优化产品开发流程,还能在多个环节实现智能决策,为企业带来前所未有的价值。在2025 年,我们有望看到 PLM 系统集成 AI 后在众多领域展现出强大的…

PLM项目管理软件在汽车行业的应用案例

PLM项目管理软件在汽车行业的应用案例 汽车行业作为制造业的重要组成部分,面临着日益复杂的产品研发、生产管理等挑战。在这样的背景下,PLM(产品生命周期管理)项目管理软件应运而生,为汽车企业提升竞争力提供了有力支持。PLM项目管理软件涵盖了从产品概念设计到产品退役的…

java自学学习路线笔记+实践项目+面试八股文

基础知识巩固Java基础:掌握基本语法、数据类型、控制结构、面向对象等核心概念。推荐学习资源:韩顺平老师的B站课程。 Java进阶:深入学习集合框架、IO流、反射、注解等高级特性。 Java并发:理解线程、锁、并发工具类等,为高并发项目开发打基础。数据库技术MySQL:掌握SQL语…

awdp pwn

ciscn&ccb半决第十八届CISCN&CCB半决赛 awdp pwn typo snprintf() 是一个 C 语言标准库函数,用于格式化输出字符串,并将结果写入到指定的缓冲区,与 sprintf() 不同的是,snprintf() 会限制输出的字符数,避免缓冲区溢出。 C 库函数 int snprintf(char str, size_t …

matlab并行计算

parfor比较难用,要求变量之间不能有干扰,必须能相互独立,这里推荐一下parfeval,相当于多开了n个matlab。 parfeval可以并行运行同一个函数,赋值不同的参数。 首先创建并行池-: p = parpool(2);%这里相当于使用了两个核心,根据你的CPU核心数决定。parfeval用于并行执行代…

1.4K star!几分钟搞定AI视频创作,这个开源神器让故事可视化如此简单!

story-flicks 是一个基于AI技术的自动化视频生成工具,能够将文字剧本快速转化为高质量短视频。开发者@alecm20通过深度学习算法,实现了从文本解析到视频合成的全流程自动化处理,支持多平台适配输出,是内容创作者和自媒体运营者的效率神器。 嗨,大家好,我是小华同学,关注…

C#实现自己的Json解析器(LALR(1)+miniDFA)

C#实现自己的Json解析器(LALR(1)+miniDFA) Json是一个用处广泛、文法简单的数据格式。本文介绍如何用bitParser(拥有自己的解析器(C#实现LALR(1)语法解析器和miniDFA词法分析器的生成器))迅速实现一个简单高效的Json解析器。 读者可在(JsonFormat)查看、下载完整代码。 J…