博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[UVA 11600] Masud Rana
阅读量:6793 次
发布时间:2019-06-26

本文共 1398 字,大约阅读时间需要 4 分钟。

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

1196604-20171016145148943-1536478780.png
1196604-20171016145155256-262133653.png

还是先缩点吧,把那些已经可以互相到达的点缩起来。(直接暴力 \(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
#include
#include
#include
#include
#define db double#define il inline#define RG registerusing 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
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

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

你可能感兴趣的文章
Android:解决列表滚动时背景色变黑的方法
查看>>
(转)十月百度,阿里巴巴,迅雷搜狗最新面试七十题
查看>>
freeglut 2.8.1 windows 8 x64 配置
查看>>
apache 配置虚拟主机
查看>>
FTP 的 被动传输模式
查看>>
使用 hydra 破解路由器密码
查看>>
小黑小波比.sql语句查询0:全部;1:类型A;2:类型B
查看>>
@PathVariable 包含斜杠
查看>>
思达报表工具Style Report基础教程—参数化查询
查看>>
为什么用ls和du显示出来的文件大小有差别?
查看>>
如何依据激励对象和公司状况,选择正确的股权激励方式?
查看>>
Android apktool更新版本后遇到的一些问题
查看>>
Java面试题之九 (转) 二
查看>>
k8s 安装 + docker
查看>>
servlet 产生验证码
查看>>
java里怎样在客户端获取response的Cookie
查看>>
quick lua下自定义事件处理
查看>>
tomcat 启动报 操作系统找不到已输入的环境选项
查看>>
10进制转换, 输出字符
查看>>
svg在线生成器地址
查看>>