洛谷P9584 「MXOI Round 1」城市

embedded/2025/2/12 14:55:26/

洛谷题目传送门

题目描述

小 C 是 F 国的总统,尽管这个国家仅存在于网络游戏中,但他确实是这个国家的总统。

F 国由 n 个城市构成,这 n 个城市之间由 n−1 条双向道路互相连接。保证从任意一个城市出发,都能通过这 n−1 条双向道路,到达任意一个城市。

当然,通过这些双向道路是要收费的。通过第 i 条双向道路,需要花费 ci 元。我们称 ci 为第 i 条双向道路的费用。

我们定义 cost(x,y) 表示从城市 x 到城市 y 的简单路径上,所有经过的双向道路的费用之和。特殊地,当 x=y 时,cost(x,y)=0。

为了促进 F 国发展,小 C 新建了一个城市 n+1。现在他需要再新建一条双向道路,使得城市 n+1 也可以通过这 n 条双向道路到达任意一个城市。

他共有 q 个新建道路的方案,每个方案会给定两个参数 ki,wi;对于每一个方案,你需要求出在新建一条连接城市 ki​ 和城市 n+1 且费用为 wi​ 的双向道路后,所有 cost(i,j) 之和,即 \sum_{i=1}^{n+1} \sum_{j=1}^{n+1} cost(i,j)

由于答案可能很大,所以你只需要输出答案对 998244353 取模的结果。

方案之间相互独立,也就是说所有方案不会影响现有的道路,这些方案不会真正被施行。

输入格式

第一行两个整数 n,q。

接下来 n−1 行,第 i 行三个整数 ui,vi,ci,表示存在一条连接城市 ui 和城市 vi 的双向道路,其费用为 ci。

接下来 q 行,第 i 行两个整数 ki,wi,表示一个新建道路的方案。

输出格式

共 q 行,每行一个整数,第 i 行的整数表示在新建一条连接城市 ki​ 和城市n+1 且费用为 wi​ 的双向道路后,所有 cost(i,j) 之和对 998244353 取模的结果,即 \sum_{i=1}^{n+1} \sum_{j=1}^{n+1} cost(i,j) mod 998244353

输入输出样例

输入 #1

4 2
2 1 3
3 2 2
4 2 4
1 2
2 2

输出 #1

100
88

输入 #2

9 5
2 3 6
6 1 4
5 2 10
2 4 1
9 1 9
2 8 3
1 2 3
7 4 8
4 9
7 3
6 1
9 7
2 1

输出 #2

1050
1054
970
1148
896

说明/提示

【样例解释 #1】

在新建一条连接城市 1 和城市 5 且费用为 2 的双向道路后,F 国的道路如下图所示:

例如,此时 cost(4,5)=9,cost(1,3)=5。

容易求得此时 \sum_{i=1}^{n+1} \sum_{j=1}^{n+1} cost(i,j)=100。

【样例 #3】

见附加文件中的 city/city3.in 与 city/city3.ans

该样例满足测试点 4 的限制。

【样例 #4】

见附加文件中的 city/city4.in 与 city/city4.ans

该样例满足测试点 11 的限制。

【样例 #5】

见附加文件中的 city/city5.in 与 city/city5.ans

该样例满足测试点 14 的限制。

【样例 #6】

见附加文件中的 city/city6.in 与 city/city6.ans

该样例满足测试点 20 的限制。

【数据范围】

对于 100% 的数据,2≤n≤200000,1≤q≤200000,1≤ui,vi,ki≤n,1≤ci,wi≤1000000,保证从任意一个城市出发,都能通过原本存在的 n−1 条双向道路,到达任意一个城市。

测试点编号n≤q≤特殊性质
1∼3808080
4∼750005000
8∼105000200000
11∼13200000200000A
14∼16200000200000B
17∼20200000200000

特殊性质 A:保证对于所有的 1≤i<n,都有 ui=i,vi=i+1。

特殊性质 B:保证对于所有的 1≤i≤q,都有 ki=1。

附件下载

city.zip1.24MB

思路

很明显是换根dp

 如图,令dp[u] 为 u 到其他所有节点的距离和

所以 dp[u]=dp[fa]-(siz[u]-1)*dis(u,fa)+(n-siz[u]-1)*dis(u,fa)

其中 fa 为 u 的父亲节点,siz[u] 为 u 及其子节点的数量和

因为 u 到每一个节点的距离相较于 fa 的距离,u  的子树都少经过了边(u,fa)(不包括 u),除 u 及其子树与 fa 都多经过了边(u,fa),这样我们就可以求出没有加点的所有距离和 ans

对于新加入的点,我们只需要求出这个点到其他所有点的距离y,ans+y*2即为答案

因为一个点到所以点的距离等于所以点到这个点的距离

而新加入的点到其他点的距离为这个点相邻的点到所以的点的距离加上n*wi

Code

#include<bits/stdc++.h>
using namespace std;
#define ll long long
const ll N=4e5+5,mod=998244353;
ll h[N],ne[N],to[N],w[N],tot,dp[N],siz[N],n,m,ans;
void add(ll u,ll v,ll d){tot++;to[tot]=v;w[tot]=d;ne[tot]=h[u];h[u]=tot;
}
void dfs1(ll u,ll fa,ll ww){//求出所有点及其子树的大小和 1 到所有点的距离 siz[u]=1;for(ll i=h[u];i;i=ne[i]){ll v=to[i];if(v==fa)continue;dfs1(v,u,ww+w[i]);siz[u]=(siz[u]+siz[v])%mod;dp[1]=(dp[1]+ww+w[i])%mod;}
}
void dfs2(ll u,ll fa){//求出所有点到其他点的距离 for(ll i=h[u];i;i=ne[i]){ll v=to[i];if(v==fa)continue;dp[v]=(dp[u]-(siz[v]-1)*w[i]%mod+(n-siz[v]-1)*w[i]%mod+mod)%mod;ans=(ans+dp[v])%mod;//求出距离和 ans dfs2(v,u);}
}
int main(){cin>>n>>m;ll x,y,z;for(ll i=1;i<n;i++){cin>>x>>y>>z;add(x,y,z);add(y,x,z);}dfs1(1,0,0);dfs2(1,0);ans=(ans+dp[1])%mod;for(ll i=1;i<=m;i++){y=0;cin>>x>>z;cout<<(ans+(dp[x]+z*n)*2%mod)%mod<<'\n';}return 0;
}


http://www.ppmy.cn/embedded/161618.html

相关文章

kbengine服务器和 数据库 系统路径配置

一、服务器 系统路径配置 二、mysql5.7.44 系统路径配置 mysql 压缩包安装方式 解压压缩包&#xff0c;将解压路径加入 系统环境。 或者 系统变量新增 变量名&#xff1a;MYSQL_HOME 变量值&#xff1a;C:\MyPrograms\mysql-8.0.12-winx64修改系统变量的 path 变量&#xff…

数据结构——红黑树的实现

目录 1 红黑树的概念 1.1 红黑树的规则 1.2 红黑树是如何确保最长路径不超过最短路径的2倍的&#xff1f; 1.3 红黑树的效率 2 红黑树的实现 2.1 红黑树的结构 2.2 红黑树的插入 2.2.1 红黑树插入节点的大概过程 2.2.2 情况1&#xff1a;只变色&#xff0c;不旋转 2.2.3 情况…

Linux:线程的互斥与同步

一、买票的线程安全 大部分情况&#xff0c;线程使用的数据都是局部变量&#xff0c;变量的地址空间在线程栈空间内&#xff0c;这种情况&#xff0c;变量归属单个线程&#xff0c;其他线程无法获得这种变量。 但有时候&#xff0c;很多变量都需要在线程间共享&#xff0c;这样…

【AI落地应用实战】DeepSeek大模型应用探讨与RAG技术全景——从实验室榜单看向真实业务场景

目录 一、DeepSeek技术突破背后的应用之困1.1、知识边界困境&#xff1a;知识并不是无限的1.2、时间壁垒困境&#xff1a;训练是存在截止时间的1.3、概率生成困境&#xff1a;回答不一定是准确的1.4、数据安全困境&#xff1a;在线的并不是最安全的 二、RAG技术全景2.1、大模型…

STM32自学记录(十)

STM32自学记录 文章目录 STM32自学记录前言一、USART杂记二、实验1.学习视频2.复现代码 总结 前言 USART 一、USART杂记 通信接口&#xff1a;通信的目的&#xff1a;将一个设备的数据传送到另一个设备&#xff0c;扩展硬件系统。 通信协议&#xff1a;制定通信的规则&#x…

UnrealEngine开发无人机飞行模拟软件的手柄如何选择

问题&#xff1a; 我用虚幻引擎开发飞行模拟软件&#xff0c;需要选一款手柄。要求&#xff1a;精度高&#xff0c;杆量极值准&#xff0c;复位准&#xff0c;手感好&#xff0c;推杆阻尼均匀&#xff0c;能支持二次开发&#xff0c;无加密&#xff0c;可以被虚幻引擎识别的手…

成为高能量体质:从身体神庙到精神圣殿的修炼之路

清晨五点&#xff0c;当城市还在沉睡&#xff0c;瑜伽垫上的汗水已经折射出第一缕阳光。这不是苦行僧的自虐&#xff0c;而是高能量体质者的日常仪式。在这个能量稀缺的时代&#xff0c;如何把自己修炼成一座小型核电站&#xff1f;答案就藏在身体的每个细胞里。 一、能量管理…

解决 keep-alive 缓存组件中定时器干扰问题

当使用 keep-alive 缓存组件时&#xff0c;组件中的定时器可能会在组件被缓存后继续运行&#xff0c;从而干扰其他组件的逻辑。为了避免这种情况&#xff0c;可以通过以下方法解决&#xff1a; 1. 在组件的 deactivated 钩子中清理定时器 keep-alive 为缓存的组件提供了 acti…