当两个城市之间有安全的道路的时候,他们是互相可到达的,这种关系满足自反、对称和传递性,

因此是一个等价关系,在图论中就对应一个连通块。

在一个连通块中,当前点是那个并不影响往其他连通块的点连边,因此只要记录当前连通块内有哪些点。

n<=30,数组是开不下的,而且状态转移是很少的,只会向二进制1数量增加的方向转移,所以用map保存。(最极限的应该是是2^29...)

适合用记忆化搜索来写。

很容易想到的转移方程是

S表示当前所在连通块,p是向连通块内点走的概率,trans走向某个点的概率,newS表示走到当前连通块以外得到的新连通块。

如果直接用这个式子计算会无限递归的,做一点小小的变形就好了

这样dp(S)的计算就不依赖dp(S)本身了。

#include<bits/stdc++.h>
using namespace std; const int maxn = ; int n,m; int pa[maxn];
int wei[maxn];
int fdst(int x) { return x == pa[x]? x : pa[x] = fdst(pa[x]); }
void mrge(int x,int y)
{
int a = fdst(x), b = fdst(y);
if(a != b){
pa[a] = b;
wei[b] |= wei[a];
}
}
void initUF()
{
for(int i = ; i < n; i++){
pa[i] = i;
wei[i] = <<i;
}
} map<int,double> meo;
map<int,double>:: iterator it;
#define MP make_pair
#define fi first
#define se second
double tr; double dp(int s)
{
if((it = meo.find(s)) != meo.end()) return it->second;
double ans = ;
int lks = ;
for(int i = n; i--;){
if(s>>i&) { lks++; continue; }
ans += dp(s|wei[i]);
}
ans = (n-.)/(n-lks)*(tr*ans + );
meo.insert(MP(s,ans));
return ans;
} //#define LOCAL
int main()
{
#ifdef LOCAL
freopen("in.txt","r",stdin);
#endif
int T, ks = ; cin>>T;
while(T--){
scanf("%d%d",&n,&m);
printf("Case %d: ",++ks);
if(n == ){
puts("");
continue;
}
initUF();
for(int i = m; i--; ){
int x,y; scanf("%d%d",&x,&y);
mrge(x-,y-);
}
tr = ./(n-);
for(int i = n; i--;){
wei[i] = wei[fdst(i)];
}
meo.clear();
meo.insert(MP((<<n)-,));
printf("%lf\n",dp(wei[]));
}
return ;
}

UVA 11600 Masud Rana(概率dp)的更多相关文章

  1. UVA 11600 Masud Rana

    题目大意:有一个n个点的完全图,有些路上有妖怪.现在一个人从一号点出发,每天随机走向另一个点,消灭路上的妖怪,问平均几天后所有点之间存在没有妖怪的路径.点数≤30. 看到点这么少肯定状压,看见存不下肯 ...

  2. Substring UVA - 11468 AC自动机+概率DP

    题意: 给出一些字符和各自对应的选择概率,随机选择L次后得到一个长度为L的随机字符串S. 给出K个模板串,计算S不包含任何一个模板串的概率 dp[i][j]表示走到AC自动机 i 这个节点 还需要走 ...

  3. UVA 10529-Dumb Bones(概率dp)

    题意: 给出放一个多米诺骨牌,向左向右倒的概率,求要放好n个骨牌,需要放置的骨牌的期望次数. 分析: 用到区间dp的思想,如果一个位置的左面右面骨牌都已放好,考虑,放中间的情况, dp[i]表示放好前 ...

  4. UVA 10529 - Dumb Bones (概率dp)

    题目描述 You are trying to set up a straight line of dominos, standing on end, to be pushed over later f ...

  5. UVA 11021 C - Tribles(概率DP)

    记忆化就可以搞定,比赛里都没做出来,真的是态度有问题啊... #include <iostream> #include<cstdio> #include<cstring& ...

  6. UVa 11468 (AC自动机 概率DP) Substring

    将K个模板串构成一个AC自动机,那些能匹配到的单词节点都称之为禁止节点. 然后问题就变成了在Tire树上走L步且不经过禁止节点的概率. 根据全概率公式用记忆化搜索求解. #include <cs ...

  7. uva 11468 AC自动机+概率DP

    #include<cstdio> #include<cstring> #include<queue> #include<cstdio> #include ...

  8. [uva 11762]Race to 1[概率DP]

    引用自:http://hi.baidu.com/aekdycoin/item/be20a91bb6cc3213e3f986d3,有改动 题意: 已知D, 每次从[1,D] 内的所有素数中选择一个Ni, ...

  9. UVa 11427 Expect the Expected (数学期望 + 概率DP)

    题意:某个人每天晚上都玩游戏,如果第一次就䊨了就高兴的去睡觉了,否则就继续直到赢的局数的比例严格大于 p,并且他每局获胜的概率也是 p,但是你最玩 n 局,但是如果比例一直超不过 p 的话,你将不高兴 ...

随机推荐

  1. Codeforces - 102222C - Caesar Cipher

    https://codeforc.es/gym/102222/my 好像在哪里见过这个东西?字符的左右移还是小心,注意在mod26范围内. #include<bits/stdc++.h> ...

  2. go培训课程都学什么?go语言框架学习:xorm框架知识介绍

    xorm框架介绍 xorm是一个简单而强大的Go语言ORM库. 通过它可以使数据库操作非常简便. 通过xorm框架,开发者可以方便的使用各种封装好的方法来代替原生的sql语句.这样就降低了我们开发者使 ...

  3. 上传文件到linux乱码问题

    由于linux系统编码一般设置为utf-8,而中文windows下通常默认编码是gbk,因此经常需要将文件名或文件内容编码进行转换,文件名编码转换软件:convmv yum install convm ...

  4. uva12545 比特变换器(贪心)

    uva12545 比特变换器(贪心) 输入两个等长的串S,T(长度小于100),其中S包含字符0,1,?,T中包含0和1.有三种操作:将S中的0变为1,?变为0或1,交换S中的任意两个字符.求将S变成 ...

  5. 深入理解C/C++ [Deep C (and C++)]

    编程是困难的,正确的使用C/C++编程尤其困难.确实,不管是C还是C++,很难看到那种良好定义并且编写规范的代码.为什么专业的程序员写出这样的代码?因为绝大部分程序员都没有深刻的理解他们所使用的语言. ...

  6. Ruby中如何识别13位的时间戳

    由于13位的时间戳在Ruby中是比较另类的,以为Ruby中默认的时间戳都是10位的.而Time和Date是Ruby中常用的处理时间的模块. 由于最初遇到问题的时候网上搜了好久都没找到合适的,因此就自己 ...

  7. bzoj5506:[gzoi2019]旅行者

    传送门 正反两边dijkstra染色,然后枚举一下边,求出最小值就好啦 代码: #include<cstdio> #include<iostream> #include< ...

  8. angularJs1.x 版本中 uib-tabset 如何默认激活不同的标签页

     <uib-tabset> 默认有个active属性,根据官方文档,active的默认值是0,也就是说,默认显示索引为0的标签页,可以通过修改这个值来默认显示不同的索引的标签页. 示例: ...

  9. (转)Linux 开机引导和启动过程详解

    Linux 开机引导和启动过程详解 编译自:https://opensource.com/article/17/2/linux-boot-and-startup作者: David Both 原创:LC ...

  10. 迷你迅雷+SqlServer2008r2下载

    迷你迅雷下载 http://down.sandai.net/mini/MiniThunderInstaller3.1.1.58.exe SqlServer 2008r2下载 ed2k://|file| ...