洛谷4316——绿豆蛙的归宿(期望)

传送门

不用说了吧

d p [ i ] dp[i] 表示从 i i 走到 n n 的期望步数

那么显然 d p [ n ] = 0 dp[n]=0

那么直接深搜,然后除以一个出度就可以了

#include<bits/stdc++.h>
using namespace std;
int adj[100005],nxt[200005],to[200005],cnt,n,m;
double dp[100005],val[200005],in[100005];
bool vis[100005];
inline int read(){
	char ch=getchar();
	int res=0;
	while(!isdigit(ch)) ch=getchar();
	while(isdigit(ch)) res=(res<<3)+(res<<1)+(ch^48),ch=getchar();
	return res;
}
inline void addedge(int u,int v,int w){
	in[u]++,nxt[++cnt]=adj[u],adj[u]=cnt,to[cnt]=v,val[cnt]=w;
}
inline double dfs(int u){
	if(vis[u])return dp[u];
	vis[u]=true;
	if(u==n)return dp[u]=0.000;
	for(int e=adj[u];e;e=nxt[e]){
		int v=to[e];
		dp[u]+=val[e]+dfs(v);
	}
	dp[u]/=in[u];
	return dp[u];
}
int main(){
	n=read(),m=read();
	for(int i=1;i<=m;i++){
		int u=read(),v=read(),w=read();
		addedge(u,v,w);
	}
	double ans=dfs(1);
	printf("%.2lf",ans);
	return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_42555009/article/details/83152582