博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
BZOJ.2707.[SDOI2012]走迷宫(期望 Tarjan 高斯消元)
阅读量:5278 次
发布时间:2019-06-14

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

一个点到达终点的期望步数 \(E_i=\sum_{(i,j)\in G}\frac{E_j+1}{out[i]}\)\(out[i]\)为点\(i\)的出度。

那么对于一个DAG可以直接在反向图上拓扑+DP求解。
于是对于环内高斯消元,缩点后拓扑+DP。
无解(无限步)的情况: 起点到不了终点;起点能够走到一个环,且在这个环内无法走到终点(走不出去)。

ps:1.T连出的边不能计算。

2.期望的计算式有个+1!
3.建反向边!
4.重边


注:

如果\(E_i\)表示从起点到点\(i\)的期望步数,那么起点可能多次到达点\(i\)\(E_i\)这个值就。。(可以就直接拿起点做例子?)
如果\(E_i\)表示到达终点的期望步数就没有这个问题。


//21136kb   5168ms#include 
#include
#include
#include
#include
#define gc() getchar()const int N=1e4+5,M=1e6+5;int n,m,S,T,Enum,H[N],to[M],nxt[M],_H[N],_to[M],_nxt[M],in[N],q[N];int tot,bel[N],scc[N][103],num[N],sz[N],Index,dfn[N],low[N],sk[N],top;double A[105][105],E[N],out[N];bool vis[N],vis_s[N],exist[N];inline int read(){ int now=0;register char c=gc(); for(;!isdigit(c);c=gc()); for(;isdigit(c);now=now*10+c-'0',c=gc()); return now;}inline void AddEdge(int u,int v){ to[++Enum]=v, nxt[Enum]=H[u], H[u]=Enum; _to[Enum]=u, _nxt[Enum]=_H[v], _H[v]=Enum;}void Tarjan(int x){ dfn[x]=low[x]=++Index, sk[++top]=x, exist[x]=1; for(int i=H[x]; i; i=nxt[i]) if(!dfn[to[i]]) Tarjan(to[i]),low[x]=std::min(low[x],low[to[i]]); else if(exist[to[i]]) low[x]=std::min(low[x],dfn[to[i]]); if(dfn[x]==low[x]) { ++tot; do { bel[sk[top]]=tot, num[sk[top]]=sz[tot], scc[tot][sz[tot]++]=sk[top], exist[sk[top--]]=0; }while(sk[top+1]!=x); }}void DFS(int x){ vis[x]=vis_s[bel[x]]=1; if(x==T) return;//有没有都行 for(int i=H[x]; i; i=nxt[i]) if(!vis[to[i]]) /*++in[bel[x]],//Wrong*/DFS(to[i]);}void Gauss(int n){ for(int j=0; j
fabs(A[mxrow][j])) mxrow=i; if(mxrow!=j) for(int k=0; k<=n; ++k) std::swap(A[mxrow][k],A[j][k]); for(int i=j+1; i

转载于:https://www.cnblogs.com/SovietPower/p/8681877.html

你可能感兴趣的文章
PHP截取中英文混合字符
查看>>
电子眼抓拍大解密
查看>>
51nod1076 (边双连通)
查看>>
Linux pipe函数
查看>>
Zerver是一个C#开发的Nginx+PHP+Mysql+memcached+redis绿色集成开发环境
查看>>
程序的静态链接,动态链接和装载 (补充)
查看>>
关于本博客说明
查看>>
[Kaggle] Sentiment Analysis on Movie Reviews
查看>>
价值观
查看>>
mongodb命令----批量更改文档字段名
查看>>
国外常见互联网盈利创新模式
查看>>
android:scaleType属性
查看>>
shell脚本
查看>>
Upload Image to .NET Core 2.1 API
查看>>
【雷电】源代码分析(二)-- 进入游戏攻击
查看>>
Linux中防火墙centos
查看>>
如何设置映射网络驱动器的具体步骤和方法
查看>>
centos下同时启动多个tomcat
查看>>
Leetcode Balanced Binary Tree
查看>>
[JS]递归对象或数组
查看>>