传送门

题目大意

https://www.luogu.org/problemnew/show/CF235D

分析

我们先考虑它是树的情况

我们设$event(x,y)$表示删除点x是y与x联通这件事对答案贡献的期望

我们设x到y这一条链的长度为$len$,$x$和$y$所属联通块的大小为$n$

则我们可以猜测$event$的值为$\frac{1}{len}$

我们可以用数学归纳法证明

我们知道直接选到$x$的概率为$\frac{1}{n}$

先选到其它点再通过若干步选到x的概率为$\frac{n-len}{n} * \frac{1}{len}$

由此得证

于是我们在考虑它是基环树的情况

我们不难发现对于不经过环的路径没有影响

而其它路径我们把它不经过环的那些距离设为$x$,经过环的两条路分别为$y$和$z$

$event(x,y)$发生的概率实际上就是这两条路中$x$是任意一条路上第一个被删除的结点的概率

我们再容斥一下就可以得到$event(x,y) = \frac{1}{x+y} + \frac{1}{x+z} - \frac{1}{x+y+z}$

代码

#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<algorithm>
#include<cctype>
#include<cmath>
#include<cstdlib>
#include<queue>
#include<ctime>
#include<vector>
#include<set>
#include<map>
#include<stack>
using namespace std;
int n,m,dep[],id[],cnt,sum,acc[],lca[][],f[];
int dfn[],low[],ist[],belong[],tot[],maxid;
double Ans;
stack<int>a;
vector<int>v[];
inline void tarjan(int x,int fa){
dfn[x]=low[x]=++cnt;
a.push(x);
ist[x]=;
for(int i=;i<v[x].size();i++)
if(v[x][i]!=fa){
if(!dfn[v[x][i]]){
tarjan(v[x][i],x);
low[x]=min(low[x],low[v[x][i]]);
}else if(ist[v[x][i]]){
low[x]=min(low[x],dfn[v[x][i]]);
}
}
if(low[x]==dfn[x]){
sum++;
while(){
int u=a.top();
a.pop();
ist[u]=;
belong[u]=sum;
tot[sum]++;
if(u==x)break;
}
}
}
inline int sf(int x){return f[x]==x?x:f[x]=sf(f[x]);}
inline void work(int x,int ac,int fa){
acc[x]=ac;
f[x]=x;
for(int i=;i<v[x].size();i++)
if(v[x][i]!=fa&&tot[belong[v[x][i]]]==){
dep[v[x][i]]=dep[x]+;
work(v[x][i],ac,x);
if(sf(v[x][i])!=sf(x))
f[sf(v[x][i])]=sf(x);
}
for(int i=;i<=n;i++)
if(acc[i]==ac)lca[x][i]=lca[i][x]=sf(i);
}
inline void dfs(int x,int fa){
id[x]=id[fa]+,dep[x]=,acc[x]=x;
work(x,x,x);
for(int i=;i<v[x].size();i++)
if(v[x][i]!=fa&&!id[v[x][i]]){
if(tot[belong[v[x][i]]]>)dfs(v[x][i],x);
}
}
int main(){
int i,j,k,x,y;
scanf("%d",&n);
for(i=;i<=n;i++){
scanf("%d%d",&x,&y);
x++,y++;
v[x].push_back(y);
v[y].push_back(x);
}
for(i=;i<=n;i++)
if(!dfn[i])tarjan(i,);
for(i=;i<=n;i++)
if(tot[belong[i]]>){
id[i]=;
maxid=tot[belong[i]];
dfs(i,);
break;
}
for(i=;i<=n;i++)
for(j=;j<=n;j++){
if(acc[i]==acc[j])Ans+=1.0/(dep[i]+dep[j]-*dep[lca[i][j]]+);
else {
int x=dep[i]+dep[j],y=abs(id[acc[i]]-id[acc[j]])-,z=maxid-y-;
Ans+=1.0/(x+y)+1.0/(x+z)-1.0/(x+y+z);
}
}
printf("%0.7lf\n",Ans);
return ;
}

235D Graph Game的更多相关文章

  1. Codeforce 水题报告

    最近做了好多CF的题的说,很多cf的题都很有启发性觉得很有必要总结一下,再加上上次写题解因为太简单被老师骂了,所以这次决定总结一下,也发表一下停课一星期的感想= = Codeforces 261E M ...

  2. [开发笔记] Graph Databases on developing

    TimeWall is a graph databases github It be used to apply mathematic model and social network with gr ...

  3. Introduction to graph theory 图论/脑网络基础

    Source: Connected Brain Figure above: Bullmore E, Sporns O. Complex brain networks: graph theoretica ...

  4. POJ 2125 Destroying the Graph 二分图最小点权覆盖

    Destroying The Graph Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 8198   Accepted: 2 ...

  5. [LeetCode] Number of Connected Components in an Undirected Graph 无向图中的连通区域的个数

    Given n nodes labeled from 0 to n - 1 and a list of undirected edges (each edge is a pair of nodes), ...

  6. [LeetCode] Graph Valid Tree 图验证树

    Given n nodes labeled from 0 to n - 1 and a list of undirected edges (each edge is a pair of nodes), ...

  7. [LeetCode] Clone Graph 无向图的复制

    Clone an undirected graph. Each node in the graph contains a label and a list of its neighbors. OJ's ...

  8. 讲座:Influence maximization on big social graph

    Influence maximization on big social graph Fanju PPT链接: social influence booming of online social ne ...

  9. zabbix利用api批量添加item,并且批量配置添加graph

    关于zabbix的API见,zabbixAPI 1item批量添加 我是根据我这边的具体情况来做的,本来想在模板里面添加item,但是看了看API不支持,只是支持在host里面添加,所以我先在一个ho ...

随机推荐

  1. Hibernate HQL查询(2)

    hql是面向对象查询,格式:from + 类名 + 类对象 + where + 对象的属性 sql是面向数据库表查询,格式:from + 表名 + where + 表中字段 1.查询 一般在Hiber ...

  2. C#进阶之路(七)反射的应用

    反射在C#中的应用还是很多的,但它对代码的性能有一定影响. 反射的性能: 使用反射来调用类型或者触发方法,或者访问一个字段或者属性时clr 需要做更多的工作:校验参数,检查权限等等,所以速度是非常慢的 ...

  3. HTML标签01

    html标签:table 表格 (里面加的属性指整个表格的)tr 行td 单元格 (可以换成th,只有在单元格里面才能输入文字)th 表头 默认让文字居中 文字还会显示加粗状态 font 文字标签 属 ...

  4. 转载.怎样在Quartus II中转化HDL文件为bsf文件?

    步骤1 新建或打开Quartus II工程,用QII自带文本编辑器打开HDL文件. 图1 用QII自带的文本编辑器打开HDL文件 步骤2 选择File>Create / Update>Cr ...

  5. rest异常框架

    好的工具:postman 教程:http://blog.csdn.net/ye1992/article/details/49998511 RuntimeMXBean是Java 虚拟机的运行时系统的管理 ...

  6. windows中文编码报错 com.google.gson.JsonIOException: java.nio.charset.MalformedInputException: Input length = 1

    昨天碰到一个问题:同一个请求页面,页面经过匹配后调用http的post协议接口,部署在linux环境的没问题,本地Eclipse启动的tomcat也没问题,直接启动本地tomcat却报错了: 18:4 ...

  7. Linux I2C设备驱动

    i2c设备:ts.camera.audio.gsensor.e2prom I2C基本协议: 写:开始 -> 设备地址 -> 写标志 -> 应答 -> 内部地址 -> 应答 ...

  8. jenkin执行权限问题

    jenkins执行报错 stderr: Permission denied, please try again. Permission denied, please try again. Permis ...

  9. Quartz.net 2.x 学习笔记03-使用反射加载定时任务

    将定时任务信息存储在XML文件中,使用反射加载定时任务 首先新建一个MVC的空站点,使用NuGet添加对Quartz.net和Common.Logging.Log4Net1213的引用,同时使用NuG ...

  10. codeforce 980B - Marlin(构造)

    Marlin time limit per test 1 second memory limit per test 256 megabytes input standard input output ...