题意:

有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 ;
}

最新文章

  1. JS实现文字截取(雾)
  2. Autodesk 招人了,开发顾问,感兴趣的或者有推荐的人扔简历过来啊
  3. [接口服务] Jersey Rest Demo
  4. jquery获取高度错误(可以获取到宽度,但获取不到高度),及解决办法
  5. mysql的 join联合查询的通俗解释
  6. 慎用memset();
  7. Ppoj 1014 深搜
  8. java实现邮箱找密码
  9. RobotFramework自动化测试框架-移动手机自动化测试Get Element Location关键字的使用
  10. NOIP2014无线网络发射器选址改编1
  11. Python--socketserve源码分析(一)
  12. 奥比中光Orbbec Astra Pro RGBD 3D视觉传感器在ROS(indigo和kinetic)使用说明 rgb depth同时显示
  13. ReactJS虚拟DOM效应带来的一则副作用探索
  14. Spring日记_01 之 Maven搭建 - 阿里云镜像替换maven配置文件
  15. MYSQL: set names utf8是什么意思?
  16. python 信号量,Event, 定时器
  17. Android之一种很有趣的界面跳动提示动画
  18. magento的常用调用
  19. Linux启动的流程
  20. BZOJ3175:[TJOI2013]攻击装置(二分图最大独立集)

热门文章

  1. VisualSVN Server的windows 2003配置和使用方法(图文并茂)
  2. POJ1321棋盘问题
  3. intellij idea 12、13 win8 下 中文输入覆盖的问题(搜狗输入法或者其他输入法)
  4. Eclipse 编译错误 Access restriction:The type *** is not accessible due to restriction on... 解决方案
  5. 核心思想:百度网盘怎么盈利(互联网的高速更新决定了:亏钱你还有点机会,放弃连门都进不了),战略预备队 good
  6. Android Studio安装、配置
  7. 图像二值化----otsu(最大类间方差法、大津算法)
  8. Mvc Kissy uploader实现图片批量上传 附带瀑布流的照片墙
  9. xmlsechema验证
  10. windows和mac下分别配置虚拟主机