2023NOIP A层联测32 T3 sakuya

虚伪的期望,彬彬赛时都能 A 的数学题。

思路

考虑算出来总的花费,再除以 \(m!\) 求期望。

对于某个排列的花费为:\(\sum\limits_{i=2}^m dis(a_{i-1},a_i)\)。

但考虑一下,这个式子重要吗?

我们的目的是求出所有排列的花费的和,不能局限于某一个排列去求。

其实,如果我们知道每一种相邻两个数出现的次数,乘上这两个点间的距离,也可以算出答案。

那么我们考虑 \(u,v\) 相邻的情况(不论先后)在 \(m!\) 种方案中会出现多少次?

赛时通过打表得知,\(u,v\) 相邻的情况有 \(2(m-1)!\) 种,现在来证明一下。

先在这 \(m\) 个数中去掉 \(v\),那么有 \((m-1)!\) 种排列,将 \(v\) 放在每一种排列的 \(u\) 的后一个位置,这样子贡献了 \((m-1)!\) 种情况。

将 \(u,v\) 互换,也能得到 \((m-1)!\) 种情况。

所以说,对于一对数 \(u,v\) 他们在 \(m!\) 种方案中,相邻的次数为 \(2(m-1)!\) 次。

也就是说,每一个 \(dis(u,v) \ (u<v)\) 在 \(m!\) 种方案中计算 \(2(m-1)!\) 次。

答案为:

\[\frac{2(m-1)!\sum\limits_{i\in A}\sum\limits_{i\in A,i<j} dis(i,j)}{m!}
\]

化简为:

\[\frac{2\times\sum\limits_{i\in A}\sum\limits_{i\in A,i<j} dis(i,j)}{m}
\]

现在求出 \(\sum\limits_{i\in A}\sum\limits_{i\in A,i<j} dis(i,j)\) 即可。

先没有修改操作,这个式子可以统计一条边两边的有效点(在集合 \(A\) 中的点的个数),来计算有多少条经过这条边多少次,乘以边权即可。

如果加上修改,那么每次会影响到和这个点相连的边,但我们不可以遍历这个点的所有边重新算贡献,这样菊花图会 TLE。

所以考虑将与一个点相连的边经过的总次数存在点上,修改时直接将总次数乘以 \(k\) 加上上次的答案即可。

时间复杂度 \(O(n+m)\)。

CODE

#include<bits/stdc++.h>
using namespace std; #define ll long long
#define mod 998244353 const int maxn=5e5+5; struct node
{
int to,nxt;
ll w;
}edge[maxn*2]; int n,tot,m;
int head[maxn]; ll ans,inv;
ll sz[maxn],c[maxn],fac[maxn]; ll ksm(ll x,ll y)
{
ll sum=1;
for(;y;y/=2,x=x*x%mod) if(y&1) sum=sum*x%mod;
return sum;
} void add(int x,int y,int z)
{
tot++;
edge[tot].to=y;
edge[tot].nxt=head[x];
edge[tot].w=z;
head[x]=tot;
} void dfs(int u,int f)
{
for(int i=head[u];i;i=edge[i].nxt)
{
int v=edge[i].to;
if(v==f) continue;
dfs(v,u);
sz[u]+=sz[v];
}
}
void dfs_ans(int u,int f)
{
for(int i=head[u];i;i=edge[i].nxt)
{
int v=edge[i].to;
if(v==f) continue;
ans=(ans+sz[v]*(sz[1]-sz[v])%mod*edge[i].w)%mod;
dfs_ans(v,u);
}
for(int i=head[u];i;i=edge[i].nxt)
{
int v=edge[i].to;
if(v!=f) c[u]=(c[u]+sz[v]*(sz[1]-sz[v])%mod)%mod;
else c[u]=(c[u]+sz[u]*(sz[1]-sz[u])%mod)%mod;
}
} int main()
{
scanf("%d%d",&n,&m);
for(int i=1;i<n;i++)
{
int x,y,z;
scanf("%d%d%d",&x,&y,&z);
add(x,y,z);
add(y,x,z);
}
for(int i=1;i<=m;i++)
{
int x;
scanf("%d",&x);
sz[x]=1;
}
dfs(1,0);
dfs_ans(1,0);
fac[0]=1;
for(int i=1;i<=m;i++) fac[i]=fac[i-1]*i%mod;
inv=ksm(fac[m],mod-2);
int _;
scanf("%d",&_);
while(_--)
{
int x;
ll k;
scanf("%d%lld",&x,&k);
ans=(ans+c[x]*k)%mod;
printf("%lld\n",ans*inv%mod*2*fac[m-1]%mod);
}
}

第一次赛时切期望( ̄▽ ̄)~*

2023NOIP A层联测32 T3 sakuya的更多相关文章

  1. sql server CDC报错:超出存储过程、函数、触发器的最大嵌套层数(最大层为32)

     sys.sp_MScdc_capture_job   RAISERROR(22801, 10, -1)      --原本 go sys.sp_MScdc_capture_job; go --修改后 ...

  2. 使 IIS 6.0 可以在 64 位 Windows 上运行 32 位应用程序 试图加载格式不正确的程序。

    原文 使 IIS 6.0 可以在 64 位 Windows 上运行 32 位应用程序 试图加载格式不正确的程序. win7 64位操作系统上边运行IIS网站应用的时候,提示错误"试图加载格式 ...

  3. 经典网络LeNet5看卷积神经网络各层的维度变化

    本文介绍以下几个CNN经典模型:Lenet(1986年).Alexnet(2012年).GoogleNet(2014年).VGG(2014年).Deep Residual Learning(2015年 ...

  4. MySQL Nested-Loop Join算法学习

    不知不觉的玩了两年多的MySQL,发现很多人都说MySQL对比Oracle来说,优化器做的比较差,其实某种程度上来说确实是这样,但是毕竟MySQL才到5.7版本,Oracle都已经发展到12c了,今天 ...

  5. Fully Convolutional Networks for semantic Segmentation(深度学习经典论文翻译)

    摘要 卷积网络在特征分层领域是非常强大的视觉模型.我们证明了经过端到端.像素到像素训练的卷积网络超过语义分割中最先进的技术.我们的核心观点是建立"全卷积"网络,输入任意尺寸,经过有 ...

  6. CNN & RNN 及一些常识知识(不断扩充中)

    参考: http://blog.csdn.net/iamrichardwhite/article/details/51089199 一.神经网络的发展历史 五六十年代,提出感知机 八十年代,提出多层感 ...

  7. Deep Learning(深度学习)学习笔记整理

    申明:本文非笔者原创,原文转载自:http://www.sigvc.org/bbs/thread-2187-1-3.html 4.2.初级(浅层)特征表示 既然像素级的特征表示方法没有作用,那怎样的表 ...

  8. 【转载】Deep Learning(深度学习)学习笔记整理

    http://blog.csdn.net/zouxy09/article/details/8775360 一.概述 Artificial Intelligence,也就是人工智能,就像长生不老和星际漫 ...

  9. Deep Residual Learning for Image Recognition(MSRA-深度残差学习)

    转自:http://blog.csdn.net/solomonlangrui/article/details/52455638   ABSTRACT:           神经网络的训练因其层次加深而 ...

  10. Deep Learning(深度学习)学习笔记整理系列之(七)

    Deep Learning(深度学习)学习笔记整理系列 zouxy09@qq.com http://blog.csdn.net/zouxy09 作者:Zouxy version 1.0 2013-04 ...

随机推荐

  1. luoguP3330 [ZJOI2011] 看电影--组合数学--高精度

    \(luoguP3330\) [ZJOI2011] 看电影 废了老命想题解 $$luogu$$ $$HZOI$$ 题意 到了难得的假期,小白班上组织大家去看电影.但由于假期里看电影的人太多,很难做到让 ...

  2. 以Top-Down思维去解决问题——递归

    目录 递归的基础 递归的底层实现(不是重点) 递归的应用场景 编程中 两种解决问题的思维 自下而上(Bottom-Up) 自上而下(Top-Down) 自上而下的思考过程--求和案例 台阶问题 案例 ...

  3. 各种好用的免费快递物流API 接口分享

    全国快递物流查询:1.提供包括申通.顺丰.圆通.韵达.中通.汇通等 600+快递公司在内的快递物流单号查询.2.与官网实时同步更新.3.自动识别快递公司. 全国快递物流地图轨迹查询:[H5 物流轨迹. ...

  4. Go 必知必会:探索 Go 语言中的数组和切片深入理解顺序集合

    文末有面经共享群 在 Go 语言的丰富数据类型中,数组和切片是处理有序数据集合的强大工具,它们允许开发者以连续的内存块来存储和管理相同类型的多个元素.无论是在处理大量数据时的性能优化,还是在实现算法时 ...

  5. 1p-frac:已开源,仅用单张分形图片即可媲美ImageNet的预训练效果 | ECCV 2024

    分形几何是一个数学分支,主要应用于作图方面.一般来说,分形经过无数次递归迭代后的结果.比如取一条线段,抹去中间的三分之一,会得到长度是原三分之一长的两条线段,中间隔着相同长度的间隙.然后重复这个动作, ...

  6. 【YashanDB数据库】VMware虚拟机使用默认安装,在掉电之后数据库无法启动

    问题现象 客户使用VMware虚拟机使用默认安装,部署YashanDB个人版,在掉电之后无法启动 操作系统: Virtualization: VMware Operating System: Cent ...

  7. [TK] HH的项链 离线树状数组解法

    实际上这题很难和树状数组联系起来,我感觉效率也不是很高,感觉不是正解 怎么使用树状数组 这道题我们很容易想到一点:同种物品在一个区间内只能出现一次,先不考虑别的问题,我们想出下面这种使用树状数组的思路 ...

  8. 第16天:信息打点-CDN绕过&业务部署&漏洞回链&接口探针&全网扫描&反向邮件

    #CDN配置: 配置1:加速域名-需要启用加速的域名 配置2:加速区域-需要启用加速的地区 配置3:加速类型-需要启用加速的资源 #参考知识: 超级Ping:http://www.17ce.com/ ...

  9. 【赵渝强老师】什么是Redis Cluster

    (一)什么是Redis Cluster? Redis Cluster是Redis的分布式解决方案,在Redis 3.0版本正式推出的,有效解决了Redis分布式方面的需求.当遇到单机内存.并发.流量等 ...

  10. 安装windows11系统跳过微软账号登录,使用本地账号登录方法

    在安装win11系统,进行到如图下所示界面的时候,暂停下 我们可以按下键盘的Shift+F10按键(部分电脑是Fn+Shift+F10),这时屏幕会出现命令行窗口,如图下所示 我们需要在命令行内输入代 ...