5091: [Lydsy0711月赛]摘苹果

Time Limit: 1 Sec  Memory Limit: 256 MB
Submit: 148  Solved: 114
[Submit][Status][Discuss]

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。
 
 
    让我们设f[i][j]为走了i次之后到j的概率。
    显然 f[0][j] = d[j]/2m 。
    然后答案就是ΣΣf[i][j] * a[j]
 
    但其实不管i是多少,f[i][j] 都等于 d[j]/2m ,接下来我来证明这一点。
 
    因为f[0][j] 等于 d[j]/2m ,所以我们第一次走上每条边(考虑方向的话是有2m条边的)的概率都是1/2m,
    所以每个点被走到的概率就是d[j]/2m,也就是f[1][j] = f[0][j] 。
     
    然后就证出来了2333
 
 
#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int maxn=200005;
const int ha=1000000007;
int inv,n,m,ans;
int k,d[maxn],a[maxn]; inline int add(int x,int y){
x+=y;
return x>=ha?x-ha:x;
} inline int ksm(int x,int y){
int an=1;
for(;y;y>>=1,x=x*(ll)x%ha) if(y&1) an=an*(ll)x%ha;
return an;
} int main(){
scanf("%d%d%d",&n,&m,&k);
int uu,vv;
inv=ksm(2*m,ha-2);
for(int i=1;i<=n;i++) scanf("%d",a+i);
for(int i=1;i<=m;i++){
scanf("%d%d",&uu,&vv);
d[uu]++,d[vv]++;
}
for(int i=1;i<=n;i++) ans=add(ans,a[i]*d[i]*(ll)inv%ha);
ans=ans*(ll)k%ha;
printf("%d\n",ans);
return 0;
}

  

bzoj 5091: [Lydsy0711月赛]摘苹果的更多相关文章

  1. 【刷题】BZOJ 5091 [Lydsy1711月赛]摘苹果

    Description 小Q的工作是采摘花园里的苹果.在花园中有n棵苹果树以及m条双向道路,苹果树编号依次为1到n,每条道路的两端连接着两棵不同的苹果树.假设第i棵苹果树连接着d_i条道路.小Q将会按 ...

  2. BZOJ5091: [Lydsy1711月赛]摘苹果(简单概率)

    5091: [Lydsy1711月赛]摘苹果 Time Limit: 1 Sec  Memory Limit: 256 MBSubmit: 214  Solved: 163[Submit][Statu ...

  3. BZOJ5091: [Lydsy1711月赛]摘苹果

    BZOJ5091: [Lydsy1711月赛]摘苹果 https://lydsy.com/JudgeOnline/problem.php?id=5091 分析: 点\(x\)第\(1\)次选中的概率是 ...

  4. bzoj5091 [Lydsy1711月赛]摘苹果 概率题

    [Lydsy1711月赛]摘苹果 Time Limit: 1 Sec  Memory Limit: 256 MBSubmit: 174  Solved: 135[Submit][Status][Dis ...

  5. BZOJ5091: [Lydsy1711月赛]摘苹果【期望DP】

    Description 小Q的工作是采摘花园里的苹果.在花园中有n棵苹果树以及m条双向道路,苹果树编号依次为1到n,每条道路的两 端连接着两棵不同的苹果树.假设第i棵苹果树连接着d_i条道路.小Q将会 ...

  6. cdoj 1255 斓少摘苹果 贪心

    斓少摘苹果 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.uestc.edu.cn/#/problem/show/1255 Descr ...

  7. 武汉科技大学ACM:1007: 陶陶摘苹果

    Problem Description 厘米高的板凳,当她不能直接用手摘到苹果的时候,就会踩到板凳上再试试. 个苹果到地面的高度,以及陶陶把手伸直的时候能够达到的最大高度,请帮陶陶算一下她能够摘到的苹 ...

  8. 洛谷-陶陶摘苹果(升级版)-BOSS战-入门综合练习1

    题目描述 Description 又是一年秋季时,陶陶家的苹果树结了n个果子.陶陶又跑去摘苹果,这次她有一个a公分的椅子.当他手够不着时,他会站到椅子上再试试. 这次与NOIp2005普及组第一题不同 ...

  9. NOIP2005-普及组复赛-第一题-陶陶摘苹果

    题目描述 Description 陶陶家的院子里有一棵苹果树,每到秋天树上就会结出10个苹果.苹果成熟的时候,陶陶就会跑去摘苹果.陶陶有个30厘米高的板凳,当她不能直接用手摘到苹果的时候,就会踩到板凳 ...

随机推荐

  1. 获得Java中System对应一些属性值

    public static void main(String[] args){ System.out.println("Java运行时环境版本:\n"+System.getProp ...

  2. BZOJ4513 SDOI2016 储能表 记忆化搜索(动态规划)

    题意: 题面中文,不予翻译:SDOI2016储能表 分析: 据说有大爷用一些奇怪的方法切掉了这道题%%%%% 这里用的是大众方法——动态规划. 其实这是一道类似于二进制数位dp的动态规划题,(但是实际 ...

  3. Git学习——创建本地仓库、提交文件

    创建Git仓库 新建或找一个存在的文件夹,在命令行进入该文件夹,输入命令 git init 添加文件到Git仓库 首先使用命令git add <file>,可以多次添加文件: 使用命令gi ...

  4. tkinter学习-滚动条

    阅读目录 Listbox 以列表的形式显示 Scrollbar 滚动条 Scale 更滚动条很相似,但更精准 Listbox:  说明:列表框控件,在Listbox窗口小部件是用来显示一个字符串列表给 ...

  5. 【linux】【git】安装/升级Git 1.9.4

      因为yum源的最新版本是1.7.x,所以无法通过yum进行更新,下面描述如何通过编译源码进行安装 1.安装需要的依赖 第一步我们需要做的就是确认系统已经安装了编译git时需要的依赖.使用下面的安装 ...

  6. Python基础知识-day2

    格式化输出 %占位符,s字符串,d 数字, 表示%  用%% name = input("请输入姓名: ") age = input("请输入年龄: ") he ...

  7. Python中的序列化以及pickle和json模块介绍

    Python中的序列化指的是在程序运行期间,变量都是在内存中保存着的,如果我们想保留一些运行中的变量值,就可以使用序列化操作把变量内容从内存保存到磁盘中,在Python中这个操作叫pickling,等 ...

  8. SpringMVC之HandlerAdapter执行流程

    01.protected void doDispatch(HttpServletRequest request, HttpServletResponse response) throws Except ...

  9. Linux暂停和恢复进程

    Linux暂停和恢复进程 kill -STOP 1234 将该进程暂停. 如果要让它恢复到后台,用kill -CONT 1234 (很多在前台运行的程序这样是不行的) 如果要恢复到前台,请在当时运行该 ...

  10. ASP.NET项目使用MYSQL数据库部署到IIS服务器找不到请求的.Net Framework Data Provider解决方案

    使用MySQL开发过程中在自己的机器上跑项目是没有问题的,但在实际部署到服务器上的时候就发生“找不到请求的.Net Framework Data Provider解决方案”错误,在排除项目本身原因之后 ...