UVA 1390 Interconnect
https://vjudge.net/problem/UVA-1390
题意:
给出n个点m条边的无向图,
每次随机加一条非自环的边,(加完后可出现重边),
添加每条边的概率是相等的
求使图连通的期望添边次数
只关心图的连通状况,即连通块的个数和大小
所以可以用{a1,a2,a3……an} 表示状态(n个连通块,每个连通块大小为ai)
添加一条边后有两种可能
1、状态不变
2、状态变为 {a1,……ai+aj,……a_n-1}
将状态哈希
dp[i]表示哈希后为i的状态 添边至连通的期望次数
dp[i]= dp[i]*p + dp[k1]*p1 + dp[k2]*p2 + …… + dp[km]*pm
其中p表示状态不变的概率,p1=Σ C(ai,2)/ C(n,2)
pi表示装移到ki这种状态的概率 ,pi= (ai*aj) / C(n,2)
上述式子移项得状态转移方程:dp[i]=(dp[k1]*p1 + dp[k2]*p2 + …… + dp[km]*pm)/(1-p)
#include<cstdio>
#include<cstring>
#include<algorithm>
const int mod=;
int n,m;
int fa[],siz[];
struct sta
{
int x[];
bool flag;
double val;
void clear() { memset(x,,sizeof(x)); }
void sort() { std::sort(x,x+); }
int hashme()
{
int v=;
for(int i=,b=;i&&x[i];i--)
{
v+=x[i]*b;
v%=mod;
b*=;
b%=mod;
}
return v;
}
bool operator == (sta b)
{
for(int i=;i<;i++)
if(x[i]!=b.x[i]) return false;
return true;
}
bool operator != (sta b)
{
return *this == b ? false : true;
}
}st,hash[mod];
int find(int i) { return fa[i]==i ? i : fa[i]=find(fa[i]); }
double gethash(sta st)
{
int x=st.hashme();
while(hash[x].flag && hash[x]!=st)
if(++x==mod) x=;
return hash[x]==st ? hash[x].val : -;
}
double inhash(sta st)
{
int x=st.hashme();
while(hash[x].flag)
if(++x==mod) x=;
hash[x]=st; hash[x].flag=true;
}
double dp(sta st)
{
if(st.hashme()==n) return ;
double x=gethash(st);
if(x!=-) return x;
double tmp=,ans=;
for(int i=;i<;i++)
tmp+=st.x[i]*(st.x[i]-)/;
for(int i=;i<;i++)
for(int j=i+;j<;j++)
{
if(!st.x[i] || !st.x[j]) continue;
sta tmp=st;
tmp.x[i]+=tmp.x[j];
tmp.x[j]=;
tmp.sort();
ans+=st.x[i]*st.x[j]*dp(tmp);
}
ans/=n*(n-)/;
ans++;
ans/=-tmp/(n*(n-)/);
st.val=ans;
inhash(st);
return ans;
}
int main()
{
int u,v;
while(scanf("%d%d",&n,&m)!=EOF)
{
for(int i=;i<mod;++i) hash[i].flag=false;
for(int i=;i<=n;i++) fa[i]=i;
while(m--)
{
scanf("%d%d",&u,&v);
fa[find(u)]=find(v);
}
st.clear();
memset(siz,,sizeof(siz));
for(int i=;i<=n;i++) siz[find(i)]++;
int tot=;
for(int i=;i<=n;i++)
if(siz[i]) st.x[tot++]=siz[i];
st.sort();
printf("%.7lf\n",dp(st));
}
}
UVA 1390 Interconnect的更多相关文章
- uva 1390 - Interconnect(期望+哈希+记忆化)
option=com_onlinejudge&Itemid=8&page=show_problem&category=514&problem=4136&mosm ...
- PatentTips - Device virtualization and assignment of interconnect devices
BACKGROUND Standard computer interconnects, particularly for personal computers or workstations, may ...
- Greenplum记录(一):主体结构、master、segments节点、interconnect、performance monitor
结构:Client--master host--interconnect--segment host 每个节点都是单独的PG数据库,要获得最佳的性能需要对每个节点进行独立优化. master上不包含任 ...
- uva 1354 Mobile Computing ——yhx
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAABGcAAANuCAYAAAC7f2QuAAAgAElEQVR4nOy9XUhjWbo3vu72RRgkF5
- UVA 10564 Paths through the Hourglass[DP 打印]
UVA - 10564 Paths through the Hourglass 题意: 要求从第一层走到最下面一层,只能往左下或右下走 问有多少条路径之和刚好等于S? 如果有的话,输出字典序最小的路径 ...
- UVA 11404 Palindromic Subsequence[DP LCS 打印]
UVA - 11404 Palindromic Subsequence 题意:一个字符串,删去0个或多个字符,输出字典序最小且最长的回文字符串 不要求路径区间DP都可以做 然而要字典序最小 倒过来求L ...
- UVA&&POJ离散概率与数学期望入门练习[4]
POJ3869 Headshot 题意:给出左轮手枪的子弹序列,打了一枪没子弹,要使下一枪也没子弹概率最大应该rotate还是shoot 条件概率,|00|/(|00|+|01|)和|0|/n谁大的问 ...
- UVA计数方法练习[3]
UVA - 11538 Chess Queen 题意:n*m放置两个互相攻击的后的方案数 分开讨论行 列 两条对角线 一个求和式 可以化简后计算 // // main.cpp // uva11538 ...
- UVA数学入门训练Round1[6]
UVA - 11388 GCD LCM 题意:输入g和l,找到a和b,gcd(a,b)=g,lacm(a,b)=l,a<b且a最小 g不能整除l时无解,否则一定g,l最小 #include &l ...
随机推荐
- Scrum立会报告+燃尽图(十月十八日总第九次):功能细化与数据库设计
此作业要求参见:https://edu.cnblogs.com/campus/nenu/2018fall/homework/2246 项目地址:https://git.coding.net/zhang ...
- 作业2-MathExam V2.0
MathExam V2.0 一.预估与实际 PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟) Planning 计划 20 50 • ...
- Java中的抽象类abstract
abstract定义抽象类 abstract定义抽象方法,只需要声明,不需要实现 包含抽象方法的类是抽象类 抽象类中可以包含抽象方法,也可以包含普通方法 抽象类不能直接创建,可以定义父类引用变量指向子 ...
- RIGHT-BICEP测试第二次程序
根据Right-BICEP单元测试的方法我对我写的第二次程序进行了测试: 测试一:测试能否控制使用乘除 测试二:测试是否能加括号 测试三:是否可以控制题目输出数量 测试四:能否控制输出方式,选择文件输 ...
- 02-JAVA 初始化
构造器 概念:在创建对象时被自动调用的方法,构造器采用和类名一样的名称 创建对象时,会为其分配存储空间,并调用相应的构造器进行初始化.这就确保了在操作对象之前,这个对象已经被恰当的初始化了. 不接受仁 ...
- 第七周C语言代码
#ifndef NMN_LIST_H #define NMN_LIST_H #include <stdio.h> struct list_head { struct lis ...
- kafka describe 显示结果解释
> bin/kafka-topics.sh --describe --zookeeper localhost:2181 --topic my-replicated-topic Topic:my- ...
- linux的一些机制Signal, Fork,
signal(SIGCHLD, SignalHandler); 注册软中断,对应的api close(socket); ret=fork(): 父进程,返回子进程的pid. 子进程返回0, 出错返回& ...
- hbase windows安装
下载目前最新版本 http://mirrors.hust.edu.cn/apache/hbase/stable/ 最新版本 hbase-1.2.6 1. 解压到D:\software\hbase-1. ...
- CodeChef KnightMov
码死了...考试的时候基本上是写一会儿思考一会儿人生....考完了调了调...最后400行+....不应该这么长的....以后重写一下再补题解..... 也许这就是蒟蒻吧.jpg 安利cstdio博客 ...