70pts求调
查看原帖
70pts求调
800499
suzhikz楼主2024/6/10 17:42
#include<bits/stdc++.h>
using namespace std;
const int N=100005;
int head[N],to[N],nex[N],cnt;
double w[N];
void add(int u,int v,int ww){
	cnt++;
	to[cnt]=v;
	nex[cnt]=head[u];
	w[cnt]=ww;
	head[u]=cnt;
}
int n,m;
int in[N],out[N];
double dis[N];
double gai[N]; 
queue<int>q; 
signed main(){
	freopen("P4316_3.in","r",stdin);
	cin>>n>>m;
	double ww;
	for(int u,v,i=1;i<=m;i++){
		cin>>u>>v>>ww;
		add(u,v,ww);
		in[v]++;
		out[u]++;
	} 
	for(int i=1;i<=n;i++)if(in[i]==0)q.push(i);
	dis[1]=0;
	gai[1]=1;
	while(!q.empty()){
		int u=q.front();q.pop();
		for(int i=head[u];i;i=nex[i]){
			int v=to[i];
			in[v]--;
			if(in[v]==0)q.push(v);
			gai[v]+=gai[u]/out[u];
			dis[v]+=dis[u]/out[u]+w[i]/out[u]*gai[u];
		}
	}
	printf("%.2lf",dis[n]);
	return 0;
}
2024/6/10 17:42
加载中...