[cf1236F]Alice and the Cactus
首先,我们要用到期望的一个性质:
对于两个随机变量$X$和$Y$(不需要相互独立),有$E(X+Y)=E(X)+E(Y)$
另外,对于一个仙人掌,令$n$为点数,$m$为边数,$c$为简单环个数,$X$为连通块数,则$X=n-(m-c)$(环可以看作有一条无意义的边,对于森林点-边即为连通块数)
我们所求的即$E((X-E(X))^{2})$,将其展开即$E(X^{2})-E(X)^{2}$,后者$E(X)=E(n)-E(m)+E(c)$,以下以$E(m)$为例来考虑:
令$x_{1},x_{2},...,x_{m}$表示每一条边是否被存在,即若其存在则$x_{i}=1$,否则$x_{i}=0$
显然$m=\sum_{i=1}^{m}x_{i}$,根据性质1,即$E(m)=\sum_{i=1}^{m}E(x_{i})=\frac{m}{4}$
类似地,有$E(n)=\frac{n}{2}$以及$E(c)=\sum_{环}\frac{1}{2^{环上点数}}$
对于$E(X^{2})$,将其展开即$E(X^{2})=E(n^{2})+E(m^{2})+E(c^{2})-2E(nm)+2E(nc)-2E(mc)$,以下同样以$2E(mc)$为例来考虑:
令$x_{1},x_{2},...,x_{m}$与之前相同,再定义$y_{1},y_{2},...,y_{c}$(其中$c$为环数)来表示每一个环是否存在(存在为1,不存在为0),则$E(mc)=E(\sum_{i=1}^{m}x_{i}\sum_{j=1}^{c}y_{j})$
同样利用性质1展开,也就是$\sum_{i=1}^{m}\sum_{j=1}^{c}E(x_{i}y_{j})$,不难发现$E(x_{i}y_{j})=P(第i条边和第j个环同时存在)$,后者也就是第$i$条边和第$j$个环同时覆盖了多少个点的2的幂次
简单对交点数分类讨论即可,时间复杂度可以通过预处理2幂次的逆元来做到严格线性,另外由于每一条边至多被覆盖一次,可以暴力枚举所有环上所有点

1 #include<bits/stdc++.h>
2 using namespace std;
3 #define N 500005
4 #define mod 1000000007
5 struct Edge{
6 int nex,to;
7 }edge[N<<1];
8 vector<pair<int,int> >v;
9 int E,n,m,x,y,inv[N],head[N],r[N],dfn[N],f[N],dep[N],sum[N];
10 int En,Em,Ec,En2,Em2,Ec2,Enm,Enc,Emc,EX,EX2,ans;
11 void add(int x,int y){
12 edge[E].nex=head[x];
13 edge[E].to=y;
14 head[x]=E++;
15 }
16 void dfs(int k,int fa,int s){
17 dfn[k]=++dfn[0];
18 f[k]=fa;
19 dep[k]=s;
20 for(int i=head[k];i!=-1;i=edge[i].nex)
21 if (edge[i].to!=fa){
22 if (!dfn[edge[i].to])dfs(edge[i].to,k,s+1);
23 else{
24 if (dep[edge[i].to]>=s)continue;
25 int l=s-dep[edge[i].to]+1;
26 Ec=(Ec+inv[l])%mod;
27 Enc=(Enc+1LL*(n-l)*inv[l+1]+1LL*l*inv[l])%mod;
28 int s_same=l;
29 for(int j=k;;j=f[j]){
30 s_same=s_same+r[j]-2;
31 sum[j]=(sum[j]+inv[l])%mod;
32 if (j==edge[i].to)break;
33 }
34 Emc=(Emc+1LL*(m-s_same)*inv[l+2]+1LL*(s_same-l)*inv[l+1]+1LL*l*inv[l])%mod;
35 sum[0]=(sum[0]+inv[l])%mod;
36 v.push_back(make_pair(k,edge[i].to));
37 }
38 }
39 }
40 int main(){
41 inv[0]=1;
42 for(int i=1;i<N;i++)inv[i]=1LL*(mod+1)/2*inv[i-1]%mod;
43 scanf("%d%d",&n,&m);
44 memset(head,-1,sizeof(head));
45 for(int i=1;i<=m;i++){
46 scanf("%d%d",&x,&y);
47 add(x,y);
48 add(y,x);
49 r[x]++,r[y]++;
50 }
51 En=1LL*n*inv[1]%mod;
52 Em=1LL*m*inv[2]%mod;
53 En2=(1LL*n*(n-1)%mod*inv[2]+1LL*n*inv[1])%mod;
54 Enm=(1LL*m*(n-2)%mod*inv[3]+2LL*m*inv[2])%mod;
55 for(int i=1;i<=n;i++)
56 for(int j=head[i];j!=-1;j=edge[j].nex){
57 x=i,y=edge[j].to;
58 if (x<y)Em2=(Em2+1LL*(m-r[x]-r[y]+1)*inv[4]+1LL*(r[x]+r[y]-2)*inv[3]%mod+inv[2])%mod;
59 }
60 dfs(1,0,0);
61 for(int i=0;i<v.size();i++){
62 x=v[i].first,y=v[i].second;
63 int l=dep[x]-dep[y]+1,s_same=inv[l];
64 for(int j=x;;j=f[j]){
65 s_same=((s_same+sum[j]-inv[l])%mod+mod)%mod;
66 if (j==y)break;
67 }
68 Ec2=(Ec2+1LL*(sum[0]+mod-s_same)*inv[l]+1LL*(s_same+mod-inv[l])*inv[l-1]+inv[l])%mod;
69 }
70 EX=((0LL+En-Em+Ec)%mod+mod)%mod;
71 EX2=((0LL+En2+Em2+Ec2-2*Enm+2*Enc-2*Emc)%mod+mod)%mod;
72 ans=(EX2-1LL*EX*EX%mod+mod)%mod;
73 printf("%d",ans);
74 }
[cf1236F]Alice and the Cactus的更多相关文章
- Codeforces 1236F - Alice and the Cactus(期望+分类讨论)
Codeforces 题面传送门 & 洛谷题面传送门 期望好题. 首先拆方差: \[\begin{aligned} &E((x-E(x))^2)\\ =&E(x^2)-2E(x ...
- (HDU 5558) 2015ACM/ICPC亚洲区合肥站---Alice's Classified Message(后缀数组)
题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=5558 Problem Description Alice wants to send a classi ...
- 2016中国大学生程序设计竞赛 - 网络选拔赛 J. Alice and Bob
Alice and Bob Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others) ...
- bzoj4730: Alice和Bob又在玩游戏
Description Alice和Bob在玩游戏.有n个节点,m条边(0<=m<=n-1),构成若干棵有根树,每棵树的根节点是该连通块内编号最 小的点.Alice和Bob轮流操作,每回合 ...
- Alice and Bob(2013年山东省第四届ACM大学生程序设计竞赛)
Alice and Bob Time Limit: 1000ms Memory limit: 65536K 题目描述 Alice and Bob like playing games very m ...
- 阿里前端框架Alice是个不错的选择
BootStrap虽然用户群体广大,其整体风格尽管有不少skin可选,但以国情来看还是不好看. 阿里开源的前端框架,个人觉得还是很不错,Alice处处透着支付宝中界面风格的气息,电商感挺强. 以下内容 ...
- poj 1698 Alice‘s Chance
poj 1698 Alice's Chance 题目地址: http://poj.org/problem?id=1698 题意: 演员Alice ,面对n场电影,每场电影拍摄持续w周,每周特定几天拍 ...
- Alice and Bob 要用到辗转相减
Alice and BobTime Limit: 1 Sec Memory Limit: 64 MBSubmit: 255 Solved: 43 Description Alice is a be ...
- Codeforces Round #143 (Div. 2) E. Cactus 无向图缩环+LCA
E. Cactus A connected undirected graph is called a vertex cactus, if each vertex of this graph bel ...
随机推荐
- Serverless 架构到底要不要服务器?
作者 | aoho 来源 | Serverless 公众号 Serverless 是什么? Serverless 架构是不是就不要服务器了?回答这个问题,我们需要了解下 Serverless 是什么. ...
- java语言程序设计与数据结构(基础篇)第二章答案
答案为本人自己求解,若有错误,还望海涵并及时告知.如有雷同,纯属巧合. 2.1 import java.util.Scanner; public class Welcome { public stat ...
- 试题 算法训练 最大最小公倍数 java题解
资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 已知一个正整数N,问从1~N中任选出三个数,他们的最小公倍数最大可以为多少. 输入格式 输入一个正整数N. 输出格式 输出一个整数 ...
- Java(10)认识类和对象
作者:季沐测试笔记 原文地址:https://www.cnblogs.com/testero/p/15201574.html 博客主页:https://www.cnblogs.com/testero ...
- 【转-Andrew_qian】stm32中断嵌套全攻略
断断续续学习STM32一学期了,时间过的好快,现在对STM32F103系列单片机的中断嵌套及外部中断做一个总结,全当学习笔记.废话不多说,ARM公司的Cortex-m3 内核,支持256个中断,其中包 ...
- 第五课第四周笔记2:Self-Attention 自注意力
Self-Attention 自注意力 让我们跳进去谈谈transformer的self-attention机制.如果您能了解本视频背后的主要思想,您就会了解变压器网络工作背后最重要的核心思想. 让我 ...
- Hadoop集群的配置(一)
摘要: hadoop集群配置系列文档,是笔者在实验室真机环境实验后整理而得.以便随后工作所需,做以知识整理,另则与博客园朋友分享实验成果,因为笔者在学习初期,也遇到不少问题.但是网上一些文档大多互相抄 ...
- BUAA SE | 提问回顾与个人总结
项目 内容 这个作业属于哪个课程 2020春季计算机学院软件工程(罗杰 任健) 这个作业的要求在哪里 提问回顾与个人总结 我在这个课程的目标是 深入理解软件工程 这个作业在哪个具体方面帮助我实现目标 ...
- CSP-S 2021 遗言
感谢€€£,谢谢宁嘞! 第一题,€€£给了很多限制条件,什么"先到先得"."只有一个跑道",让它看起来很好做,然后来骗,来偷袭,广大"消费者" ...
- 关于下载pyton第三方库的细节
1.下载Python第三方库有时候国外的网站网速很不好,需要选择国内的镜像网站去下载 阿里云 http://mirrors.aliyun.com/pypi/simple 中国科技大学 https: ...