图片加载可能有点慢,请跳过题面先看题解,谢谢

还是先缩点吧,把那些已经可以互相到达的点缩起来。(直接暴力 \(dfs\) 缩就行)
我们设 \(f(x,S)\) 为,当前在 \(x\) 点,已经已经处理完的点的状态为 \(S\) (一个二进制数)的期望值(这里的点是缩点之后的点)
那么假设这时我们已经处理完的点数为 \(ret\) ,则我们走到没处理完的点上的概率为 \(\frac{n-ret}{n-1}\),所以我们需要走平均 \(\frac{n-1}{n-ret}\) 次才能走到那些未处理的点上
所以有转移:\(f(x,S)=\sum_{!(S\wedge (1<<i))}{\frac{f(i,S\vee (1<<i) )*size[i]}{n-ret}}\)

//made by Hero_OF_Someone
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<map>
#define db double
#define il inline
#define RG register
using namespace std;
il int gi(){ RG int x=0,q=1; RG char ch=getchar(); while( ( ch<'0' || ch>'9' ) && ch!='-' ) ch=getchar();if( ch=='-' ) q=-1,ch=getchar(); while(ch>='0' && ch<='9') x=x*10+ch-48,ch=getchar(); return q*x; }int T,t,n,m;
bool vis[54];
int size[54],cnt;
map<int,double> f[54];
int num,head[54],nxt[1008],to[1008];
il void add(int u,int v){nxt[++num]=head[u];to[num]=v;head[u]=num;nxt[++num]=head[v];to[num]=u;head[v]=num;
}il void init(){num=0; memset(head,0,sizeof(head));cnt=0; memset(vis,0,sizeof(vis));n=gi(),m=gi();for(int i=1;i<=m;i++){int u=gi(),v=gi();add(u,v);}
}il int dfs(int x){vis[x]=1; int ret=1;for(int i=head[x];i;i=nxt[i]){int v=to[i]; if(vis[v]) continue;ret+=dfs(v);}return ret;
}il db DP(int x,int S){if(f[x].count(S)) return f[x][S];int ret=0;for(int i=0;i<cnt;i++) if(S&(1<<i)) ret+=size[i];if(ret==n) return f[x][S]=0;f[x][S]=(n-1)*1.0/(n-ret);for(int i=0;i<cnt;i++){if(S&(1<<i)) continue;f[x][S]+=DP(i,S|(1<<i))*size[i]/(n-ret);  }return f[x][S];
}il void work(){for(int i=1;i<=n;i++){if(vis[i]) continue;f[cnt].clear(),size[cnt++]=dfs(i);}printf("Case %d: %.6lf\n",t,DP(0,1));
}int main(){ T=gi(); for(t=1;t<=T;t++){ init(); work(); } return 0; }

转载于:https://www.cnblogs.com/Hero-of-someone/p/7676955.html

[UVA 11600] Masud Rana相关推荐

  1. uva 11600 - Masud Rana(记忆化搜索)

    题目链接:uva 11600 - Masud Rana 题目大意:给出n和m,表示说有n座城市,每两座城市间有一条路,每条路上都有怪物,现在有m条路上没有怪物,给出没有怪物的路.现在任选一座城市移过去 ...

  2. UVA - 11600 Masud Rana

    题面在这里! 一开始看n<=30完全没有头绪啊...感觉不能二进制状压的样子qwq. 后来想了想,状态是可以压缩成 目前图中联通块大小集合 和 我们在哪个联通块的,于是开开心心整数拆分,发现n= ...

  3. UVA 11600 Masud Rana(期望+状压DP)

    题意:n个城市,城市间两两有一条道路,m条道路是没有怪物的,每天随机选一个城市(除了本身),走过去,消灭途中的怪物,如果消灭完后,所有城市都可以不通过有怪物的道路到达就结束,问平均需要的天数. 分析: ...

  4. UVA 11600 Masud Rana

    vjudge 怕不是个假题 题意是每次随机一个点,并且连边,然后走过去,求使得整张图联通的期望 显然可以把已经存在的联通块缩起来,然后考虑状压,设\(f_s\)表示现在联通的联通块集合为\(s\)到达 ...

  5. UVA 10600 Masud Rana

    点击打开链接 Problem A ACM CONTEST AND BLACKOUT In order to prepare the "The First National ACM Schoo ...

  6. Uva 11600 期望DP

    题意:n个城市,相互可达(有n(n-1)/2条边),其中有一些道路上面有妖怪,现在,从1号城市出发,随机挑取一个城市走去,这个道路上的妖怪就会被消灭,求: 在平均情况下,需要走多少步,使得任意两个城市 ...

  7. UVA11600 Masud Rana

    题目描述 PDF 输入格式 输出格式 输入输出样例 输入 #1复制 2 3 1 2 3 4 1 2 3 输出 #1复制 Case 1: 1.0 Case 2: 3.5 一看网上的题解,为什么都是\ma ...

  8. UVa在线比赛单题汇总-----DP专题

    动态规划基础 例题 LA 3882 UVa 3882 - And Then There Was One 递推------------无力orz UVa 10635 10635 - Prince and ...

  9. 《算法竞赛入门经典——训练指南》第一章相关内容

    #<算法竞赛入门经典--训练指南>第一章相关内容 希望各位大牛能指导! 红色为已经做了的...黄色背景是还有不懂地方,希望在年前能刷完第一章啊.... 更新版.google上貌似又加了ex ...

最新文章

  1. R语言统计代码运行耗时实战:计算代码运行时间、使用proc.time函数计算代码运行时间
  2. 代理类和被代理类的解释及案例
  3. go标准库的学习-net/rpc/jsonrpc
  4. 城市大轰炸(洛谷P1830题题解,Java语言描述)
  5. SpringBoot指南(六)——错误页面、单元测试、文件上传
  6. cron计划任务、chkconfig工具、systemd管理服务、unit、target介绍
  7. 手机的余存电量还有多少的时候适合充电?
  8. STL迭代器iterator
  9. 佳能g3800打印机黄灯和绿灯交替闪是什么情况?
  10. 苹果手机连接服务器传输文件,iOS 设备实现wifi局域网传输文件到iphone
  11. Ubuntu20.04 linux Erlang编程----毕达哥拉斯定理
  12. 别人犯错给自己的警醒(二):人取得成就之后很容易膨胀
  13. Wireshark系列之6 数据流追踪
  14. 北京交通大学计算机保研~
  15. Redis的五种数据结构原理分析(中)
  16. Python 实现日志监控
  17. 云台山风景区五一黄金周最后一天游客络绎不绝
  18. 第2章 信息技术发展
  19. 《20几岁要应用的经济学智慧》经济知识四
  20. discuzx不同网站孪生共用应用中心,或者应用中心密码忘记找不回的问题

热门文章

  1. 国产数据库的简单了解
  2. 实例:Gson解析泛型对象
  3. SuspendLayout 使用
  4. java如何调用本地扬声器
  5. CRM源码­|CRM系统源码开发
  6. IE下面双击checkbox反应延迟的问题
  7. Linux下使用 github+hexo 搭建个人博客04-next主题优化
  8. 2022-2027年中国无铅汽油行业市场全景评估及发展战略规划报告
  9. 投影仪哪个牌子好?怎么选家用投影仪
  10. 欢迎您来北大听我的演讲