UVA 11600-Masud Rana(状压,概率dp)
2024-09-21 21:13:11
题意:
有n个节点的图,开始有一些边存在,现在每天任意选择两点连一条边(可能已经连过),求使整个图联通的期望天数。
分析:
由于开始图可以看做几个连通分量,想到了以前做的一个题,一个点代表一个集合(这里是连通分量)进行压缩
dp[i][s]表示最后连接的第i个联通分量,联通状态是s时的期望天数,dp[0][1],即为答案,由于s可能很大,用记忆化搜索
#include <map>
#include <set>
#include <list>
#include <cmath>
#include <queue>
#include <stack>
#include <cstdio>
#include <vector>
#include <string>
#include <cctype>
#include <complex>
#include <cassert>
#include <utility>
#include <cstring>
#include <cstdlib>
#include <iostream>
#include <algorithm>
using namespace std;
typedef pair<int,int> PII;
typedef long long ll;
#define lson l,m,rt<<1
#define pi acos(-1.0)
#define rson m+1,r,rt<<11
#define All 1,N,1
#define N 50
#define read freopen("in.txt", "r", stdin)
const ll INFll = 0x3f3f3f3f3f3f3f3fLL;
const int INF= 0x7ffffff;
const int mod = ;
vector<int>e[N];
int used[N],num[N],n,m,len;
map<int,double>dp[N];
//统计各连通分量的节点数
int dfs(int u){
used[u]=;
int total=;
for(int i=;i<e[u].size();++i){
if(!used[e[u][i]])
total+=dfs(e[u][i]);
}
return total;
}
//记忆化搜索
double solve(int i,int s){
if(dp[i].count(s))return dp[i][s];
int liantong=;
//当前联通的节点数
for(int j=;j<len;++j){
if(s&(<<j))
liantong+=num[j];
}
if(liantong==n)return dp[i][s]=;
//要选择未联通的点需要的平均天数
dp[i][s]=1.0*(n-)/(n-liantong);
//选择一个未连接的联通分量
for(int j=;j<len;++j){
if(!(s&(<<j)))
dp[i][s]+=solve(j,s|(<<j))*num[j]/(n-liantong);
}
return dp[i][s];
}
int main()
{
int t,cas=;
scanf("%d",&t);
while(t--){
scanf("%d%d",&n,&m);
int u,v;
memset(used,,sizeof(used));
memset(num,,sizeof(num));
for(int i=;i<=n;++i)
e[i].clear();
while(m--){
scanf("%d%d",&u,&v);
e[u].push_back(v);
e[v].push_back(u);
}
len=;
for(int i=;i<=n;++i){
if(used[i])continue;
dp[len].clear();
num[len++]=dfs(i);
}
printf("Case %d: %.6lf\n", ++cas, solve(, ));
}
return ;
}
最新文章
- JS实现文字截取(雾)
- Autodesk 招人了,开发顾问,感兴趣的或者有推荐的人扔简历过来啊
- [接口服务] Jersey Rest Demo
- jquery获取高度错误(可以获取到宽度,但获取不到高度),及解决办法
- mysql的 join联合查询的通俗解释
- 慎用memset();
- Ppoj 1014 深搜
- java实现邮箱找密码
- RobotFramework自动化测试框架-移动手机自动化测试Get Element Location关键字的使用
- NOIP2014无线网络发射器选址改编1
- Python--socketserve源码分析(一)
- 奥比中光Orbbec Astra Pro RGBD 3D视觉传感器在ROS(indigo和kinetic)使用说明 rgb depth同时显示
- ReactJS虚拟DOM效应带来的一则副作用探索
- Spring日记_01 之 Maven搭建 - 阿里云镜像替换maven配置文件
- MYSQL: set names utf8是什么意思?
- python 信号量,Event, 定时器
- Android之一种很有趣的界面跳动提示动画
- magento的常用调用
- Linux启动的流程
- BZOJ3175:[TJOI2013]攻击装置(二分图最大独立集)
热门文章
- VisualSVN Server的windows 2003配置和使用方法(图文并茂)
- POJ1321棋盘问题
- intellij idea 12、13 win8 下 中文输入覆盖的问题(搜狗输入法或者其他输入法)
- Eclipse 编译错误 Access restriction:The type *** is not accessible due to restriction on... 解决方案
- 核心思想:百度网盘怎么盈利(互联网的高速更新决定了:亏钱你还有点机会,放弃连门都进不了),战略预备队 good
- Android Studio安装、配置
- 图像二值化----otsu(最大类间方差法、大津算法)
- Mvc Kissy uploader实现图片批量上传 附带瀑布流的照片墙
- xmlsechema验证
- windows和mac下分别配置虚拟主机