【刷题】BZOJ 5091 [Lydsy1711月赛]摘苹果
Description
小Q的工作是采摘花园里的苹果。在花园中有n棵苹果树以及m条双向道路,苹果树编号依次为1到n,每条道路的两端连接着两棵不同的苹果树。假设第i棵苹果树连接着d_i条道路。小Q将会按照以下方式去采摘苹果:
1.小Q随机移动到一棵苹果树下,移动到第i棵苹果树下的概率为d_i/(2m),但不在此采摘。
2.等概率随机选择一条与当前苹果树相连的一条道路,移动到另一棵苹果树下。
3.假设当前位于第i棵苹果树下,则他会采摘a_i个苹果,多次经过同一棵苹果树下会重复采摘。
4.重复第2和3步k次。
请写一个程序帮助计算小Q期望摘到多少苹果。
Input
第一行包含三个正整数n,m,k(n,k<=100000,m<=200000),分别表示苹果树和道路的数量以及重复步骤的次数。
第二行包含n个正整数,依次表示a_1,a_2,...,a_n(1<=a_i<=100)。
接下来m行,每行两个正整数u,v(1<=u,v<=n,u!=v),表示第u和第v棵苹果树之间存在一条道路。
Output
若答案为P/Q,则输出一行一个整数,即P*Q^ {-1} mod 1000000007(10^9+7)。
Sample Input
3 4 2
2 3 4
1 2
1 2
2 3
3 1
Sample Output
750000011
// 期望为5.75=23/4=(23*250000002) mod 1000000007=750000011。
Solution
这是一道性质题
首先我们把题目中的每一条无向边变成相应的两条有向边
我们设 \(f(i,j)\) ,表示第 \(i\) 次操作到了 \(j\) 号点的概率, \(d(i)\) 表示 \(i\) 点的出度数,也是入度数(两者相等)
那么显然有
\(f(i,j)=\sum_{(u,j) \in E}\frac{f(i-1,u)}{d(u)}\)
\(ans=\sum_{i=1}^n\sum_{j=1}^{k}f(j,i)*A(i)\)
然后我们开始观察
对于所有的 \(i\) ,必然 \(f(0,i)=\frac{d(i)}{2m}\)
因为边是有向的(转化后),所以走一条边的概率就等于这条边的出发点的概率除以它的出度度数
所以第一次走边的时候,每一条边被走到的概率就为 \(\frac{d(i)}{2m}*\frac{1}{d(i)}=\frac{1}{2m}\)
然后我们就可以推 \(f(1,i)\), \(f(1,i)=\frac{d(i)}{2m}\),因为在第一次操作中,所有指向 \(i\) 的边被走到的概率都是 \(\frac{1}{2m}\) ,而 \(i\) 有 \(d(i)\) 个入度,所以走到 \(i\) 的概率就是 \(\frac{1}{2m}\)
然后同理一直推(其实是一模一样的过程),我们就知道对于任意的 \(f(i,j)\) , \(f(i,j)\) 都等于 \(\frac{d(j)}{2m}\)
所以
\(ans=\sum_{i=1}^n\sum_{j=1}^{k}f(j,i)*A(i)=k\sum_{i=1}^n\frac{d(i)*A(i)}{2m}\)
#include<bits/stdc++.h>
#define ll long long
#define db double
#define ld long double
const int MAXN=100000+10,Mod=1e9+7;
ll n,m,k,A[MAXN],degree[MAXN];
template<typename T> inline void read(T &x)
{
T data=0,w=1;
char ch=0;
while(ch!='-'&&(ch<'0'||ch>'9'))ch=getchar();
if(ch=='-')w=-1,ch=getchar();
while(ch>='0'&&ch<='9')data=((T)data<<3)+((T)data<<1)+(ch^'0'),ch=getchar();
x=data*w;
}
template<typename T> inline void write(T x,char c='\0')
{
if(x<0)putchar('-'),x=-x;
if(x>9)write(x/10);
putchar(x%10+'0');
if(c!='\0')putchar(c);
}
template<typename T> inline void chkmin(T &x,T y){x=(y<x?y:x);}
template<typename T> inline void chkmax(T &x,T y){x=(y>x?y:x);}
template<typename T> inline T min(T x,T y){return x<y?x:y;}
template<typename T> inline T max(T x,T y){return x>y?x:y;}
inline ll qexp(ll a,ll b)
{
ll res=1;
while(b)
{
if(b&1)res=res*a%Mod;
a=a*a%Mod;
b>>=1;
}
return res;
}
int main()
{
read(n);read(m);read(k);
for(register int i=1;i<=n;++i)read(A[i]);
for(register int i=1;i<=m;++i)
{
int u,v;
read(u);read(v);
degree[u]++;degree[v]++;
}
ll ni=qexp(2*m,Mod-2);
ll ans=0;
for(register int i=1;i<=n;++i)(ans+=A[i]*degree[i]%Mod*ni%Mod)%=Mod;
(ans*=k)%=Mod;
write(ans,'\n');
return 0;
}
【刷题】BZOJ 5091 [Lydsy1711月赛]摘苹果的更多相关文章
- bzoj 5091: [Lydsy0711月赛]摘苹果
5091: [Lydsy0711月赛]摘苹果 Time Limit: 1 Sec Memory Limit: 256 MBSubmit: 148 Solved: 114[Submit][Statu ...
- BZOJ5091: [Lydsy1711月赛]摘苹果(简单概率)
5091: [Lydsy1711月赛]摘苹果 Time Limit: 1 Sec Memory Limit: 256 MBSubmit: 214 Solved: 163[Submit][Statu ...
- bzoj5091 [Lydsy1711月赛]摘苹果 概率题
[Lydsy1711月赛]摘苹果 Time Limit: 1 Sec Memory Limit: 256 MBSubmit: 174 Solved: 135[Submit][Status][Dis ...
- BZOJ5091: [Lydsy1711月赛]摘苹果
BZOJ5091: [Lydsy1711月赛]摘苹果 https://lydsy.com/JudgeOnline/problem.php?id=5091 分析: 点\(x\)第\(1\)次选中的概率是 ...
- BZOJ5091: [Lydsy1711月赛]摘苹果【期望DP】
Description 小Q的工作是采摘花园里的苹果.在花园中有n棵苹果树以及m条双向道路,苹果树编号依次为1到n,每条道路的两 端连接着两棵不同的苹果树.假设第i棵苹果树连接着d_i条道路.小Q将会 ...
- bzoj 5092 [Lydsy1711月赛]分割序列 贪心高维前缀和
[Lydsy1711月赛]分割序列 Time Limit: 5 Sec Memory Limit: 256 MBSubmit: 213 Solved: 97[Submit][Status][Dis ...
- bzoj 5094 [Lydsy1711月赛]硬盘检测 概率dp
[Lydsy1711月赛]硬盘检测 Time Limit: 1 Sec Memory Limit: 256 MBSubmit: 273 Solved: 75[Submit][Status][Dis ...
- bzoj 5093 [Lydsy1711月赛]图的价值 NTT+第二类斯特林数
[Lydsy1711月赛]图的价值 Time Limit: 30 Sec Memory Limit: 256 MBSubmit: 245 Solved: 128[Submit][Status][D ...
- bzoj 5092: [Lydsy1711月赛]分割序列
5092: [Lydsy1711月赛]分割序列 Time Limit: 5 Sec Memory Limit: 256 MBSubmit: 219 Solved: 100[Submit][Stat ...
随机推荐
- svn图文教程-宋正河整理
下载地址:http://download.csdn.net/download/songzhengdong82/4433476 在线浏览:http://wenku.baidu.com/view/07f1 ...
- python 网页转pdf
主要使用的是wkhtmltopdf的Python封装——pdfkit centos环境 安装:Install python-pdfkit pip install pdfkit 安装:Install w ...
- SMR解析
SMR描述 SMR(Shingled Magnetic Recording)叠瓦式磁记录盘是一种采用新型磁存储技术的高容量磁盘.SMR盘将盘片上的数据磁道部分重叠,就像屋顶上的瓦片一样,这种技术被称为 ...
- Dede织梦验证码不显示,织梦后台登陆验证码不显示解决方法
关于"织梦验证码不显示"的解决方法 "织梦验证码无法显示出来"的问题分析? 1.之前显示正常,但是换了服务器后就不能够正常显示:(这种通常是网站程序经过迁移后所 ...
- ovs源码阅读--netlink使用
netlink netlink socket是一种用于用户态进程和内核态进程之间的通信机制.它通过为内核模块提供一组特殊的API,并为用户程序提供了一组标准的socket接口的方式,实现了全双工的通讯 ...
- Android NDK 工具链的使用方法(Standalone Toolchain)
转载:http://blog.csdn.net/smfwuxiao/article/details/6587709 首先需要确定目标机器的指令集. 如果是 x86 的机器,用 x86-4.4.3 版本 ...
- Django_rest_framework_版本(待验证)
简介 API版本控制可以用来在不同的客户端使用不同的行为.REST框架提供了大量不同的版本设计. 版本控制是由传入的客户端请求决定的,并且可能基于请求URL,或者基于请求头. 有许多有效的方法达到版本 ...
- oracle和mysql在sql中生成uuid的方法
1,oracle sys_guid() 2,mysql uuid()
- Daily Scrum (2015/10/31)
这几天我们组的进度有点慢,剩下这一周的我们必须要加油认真对待. 周末这两天我们是这样安排的: 成员 今日任务 时间 明日任务 符美潇 数据库部分代码的编写 1h 每周小组例会 潘礼鹏 团队博客作业 ...
- OO学习总结与体会
前言 经过了对于面向对象程序设计的一个月的学习,我初尝了JAVA以及面向对象程序的魅力.经历了三次难度逐渐加大的课后编程作业,我对于工程化面向对象编程以及调试有了深刻的认识与颇多感想.我写下本篇文章以 ...