题意:n个城市,相互可达(有n(n-1)/2条边),其中有一些道路上面有妖怪,现在,从1号城市出发,随机挑取一个城市走去,这个道路上的妖怪就会被消灭,求:

在平均情况下,需要走多少步,使得任意两个城市之间,可以不经过妖怪而相互可达;

(n<=30)

分析:

1、根据题意可知,我们要将每一个可以不经过妖怪的一个个连通分量找出来;

2、然后从一个连通分量走到另一个连通分量,这时肯定进过妖怪;

3、一个一个连通分量,完成了哪几个连通分量,需要保存,这时,就用集合的方式保存;

4、从一个连通分量,走到另一个连通分量,其概率 n-con/(n-1) ,那么平均要走 n-1 / (n-con) 次;

5、状态转移,下一个状态s|(i<<n),和走向这个状态的概率;

#include <bits/stdc++.h>

using namespace std;

int n,m;
vector<int> g[];
int cnt;
int num[];
bool vis[]; int dfs(int u) {
int count = ;
vis[u] = ;
for(int i=;i<g[u].size();i++) {
int v = g[u][i];
if(!vis[v])
count+=dfs(v);
}
return count;
} map<int,double> f; double dp(int s) {
if(f[s]>1e-)
return f[s]; int con = ;
for(int i=;i<cnt;i++)
if(s&(<<i))
con+=num[i];
if(con==n)
return f[s] = ; f[s] = (n-)*1.0/(n-con);
for(int i=;i<cnt;i++) {
if(!(s&(<<i)))
f[s] +=dp(s|(<<i))*num[i]*1.0/(n-con);
}
return f[s];
} int main()
{
int t;
scanf("%d",&t);
int kase = ;
while(t--) { scanf("%d%d",&n,&m); f.clear();
for(int i=;i<=n;i++)
g[i].clear();
cnt = ;
memset(vis,,sizeof(vis));
memset(num,,sizeof(num)); int u,v;
for(int i=;i<m;i++) {
scanf("%d%d",&u,&v);
g[u].push_back(v);
g[v].push_back(u);
} for(int i=;i<=n;i++) {
if(!vis[i])
num[cnt++] = dfs(i);
} printf("Case %d: %lf\n",++kase,dp()); }
return ;
}

Uva 11600 期望DP的更多相关文章

  1. UVa 11762 (期望 DP) Race to 1

    设f(x)表示x转移到1需要的次数的期望,p(x)为不超过x的素数的个数,其中能整除x的有g(x)个 则有(1-g(x)/p(x))的概率下一步还是转移到x,剩下的情况各有1/p(x)的概率转移到x/ ...

  2. UVa 11427 (期望 DP) Expect the Expected

    设d(i, j)表示前i局每局获胜的比例均不超过p,且前i局共获胜j局的概率. d(i, j) = d(i-1, j) * (1-p) + d(i-1, j-1) * p 则只玩一天就就不再玩的概率Q ...

  3. 【BZOJ-1419】Red is good 概率期望DP

    1419: Red is good Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 660  Solved: 257[Submit][Status][Di ...

  4. [NOIP2016]换教室 D1 T3 Floyed+期望DP

    [NOIP2016]换教室 D1 T3 Description 对于刚上大学的牛牛来说, 他面临的第一个问题是如何根据实际情况中情合适的课程. 在可以选择的课程中,有2n节课程安排在n个时间段上.在第 ...

  5. HDU 4336 Card Collector (期望DP+状态压缩 或者 状态压缩+容斥)

    题意:有N(1<=N<=20)张卡片,每包中含有这些卡片的概率,每包至多一张卡片,可能没有卡片.求需要买多少包才能拿到所以的N张卡片,求次数的期望. 析:期望DP,是很容易看出来的,然后由 ...

  6. 【BZOJ-4008】亚瑟王 概率与期望 + DP

    4008: [HNOI2015]亚瑟王 Time Limit: 20 Sec  Memory Limit: 512 MBSec  Special JudgeSubmit: 832  Solved: 5 ...

  7. 期望dp BZOJ3450+BZOJ4318

    BZOJ3450 概率期望DP f[i]表示到i的期望得分,g[i]表示到i的期望长度. 分三种情况转移: ① s[i]=‘x’:f[i]=f[i-1],g[i]=0 ② s[i]=‘o’:f[i]= ...

  8. HDU 4405 期望DP

    期望DP算是第一题吧...虽然巨水但把思路理理清楚总是好的.. 题意:在一个1×n的格子上掷色子,从0点出发,掷了多少前进几步,同时有些格点直接相连,即若a,b相连,当落到a点时直接飞向b点.求走到n ...

  9. POJ 2096 【期望DP】

    题意: 有n种选择,每种选择对应m种状态.每种选择发生的概率相等,每种选择中对应的每种状态发生的概率相等. 求n种选择和m种状态中每种至少发生一次的期望. 期望DP好别扭啊.要用倒推的方法. dp[i ...

随机推荐

  1. zabbix 监控ipmi

    一,配置ipmi yum -y install OpenIPMI OpenIPMI-devel ipmitool freeipmi 登入IDARAC 在服务端测试是否可以获得数据 ipmitool - ...

  2. Ubuntu安装Docker步骤

    环境:Ubuntu Trusty 14.04 (LTS) 前提条件: Docker requires a 64-bit installation regardless of your Ubuntu v ...

  3. python移动多个子文件中的文件到一个文件夹

    import os import os.path import shutil def listDir(dirTemp): if None == dirTemp: return global nameL ...

  4. js 中移动元素的方法

    2017-12-13 19:59:24 <!DOCTYPE html> <html lang="en"> <head> <meta cha ...

  5. SpringBoot | 第二十八章:监控管理之Spring Boot Admin使用

    前言 上一章节,我们介绍了Actuator的使用,知道了可通过访问不同的端点路径,获取相应的监控信息.但使用后也能发现,返回的监控数据都是以JSON串的形式进行返回的,对于实施或者其他人员来说,不是很 ...

  6. C#生成二维码的内容

    生成二维码的内容 using QRCoder; // 生成二维码的内容 string strCode = this.txtQr.Text.Trim(); if (string.IsNullOrWhit ...

  7. C# Winform小程序:局域网设置NTP服务器、实现时间同步

    设置NTP服务器: NTP是网络时间协议(Network Time Protocol),它是用来同步网络中各个计算机的时间的协议. 局域网不能连接Internet,可以设置一台计算机为NTP服务器. ...

  8. Spring Chapter4 WebSocket 胡乱翻译 (二)

    书接上文,Spring Chapter4 WebSocket 胡乱翻译 (一) 4.4.4. 消息流 一旦暴露了STOMP端点,Spring应用程序就成为连接客户端的STOMP代理. 本节介绍服务器端 ...

  9. poi学习

    需要节点  <dependency>  <groupId>org.apache.poi</groupId>  <artifactId>poi</a ...

  10. mysql三-1:理解存储引擎

    一.什么是存储引擎 mysql中建立的库===>文件夹 库中建立的表===>文件 生活中我们用来存储数据的文件有不同的类型,每种文件类型对应各自不同的处理机制:比如处理文本用txt类型,处 ...