AcWing 217. 绿豆蛙的归宿 (正推写法)
原题链接
简单
作者:
cc_25
,
2024-10-23 00:07:39
,
所有人可见
,
阅读 2
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define INF 0x3f3f3f3f3f3f3f3f
#define fi first
#define se second
#define all(_a) _a.begin(), _a.end()
typedef pair<int,int> PII;
const int N=1e5+10;
int n,m;
vector<PII> h[N];
double dp[N];
double ans;
void dfs(int u,int fa,int sum,double p)
{
if(u==n)
{
return ;
}
int cnt=0;
for(int i=0;i<h[u].size();i++)
{
int j=h[u][i].fi;
int w=h[u][i].se;
if(fa==j) continue;
cnt++;
}
for(int i=0;i<h[u].size();i++)
{
int j=h[u][i].fi;
int w=h[u][i].se;
if(fa==j) continue;
dp[j]+=(sum+w)*(p*(1.0/cnt));
dfs(j,fa,sum+w,p*(1.0/cnt));
}
}
void solve(){
cin>>n>>m;
while(m--)
{
int a,b,c;
cin>>a>>b>>c;
h[a].push_back({b,c});
}
dfs(1,-1,0,1);
printf("%.2lf",dp[n]);
}
signed main(){
ios::sync_with_stdio(false);
cin.tie(nullptr), cout.tie(nullptr);
int T;
T=1;
while(T--)solve();
return 0;
}
//正着来不行,反着来行不行?
//实在不行就排序找规律
//考虑极限,0,1,2,max
//相加=>前缀和,后缀和
//字符串,26*2*n
//vector,deque,queue,set,map