代码如下,用拓补排序做的:
#include<iostream>
#include<vector>
#include<queue>
using namespace std;
struct node{
int next;
int value;
};
vector<node> v[100002];
int n,m;
int in[100002],out[100002],size[100002];
double d[100002];
void topo(){
queue<int> q;
for(int i=1;i<=n;i++)
if(in[i]==0) q.push(i);
while(!q.empty()){
int k=q.front();
q.pop();
for(int i=0;i<v[k].size();i++){
in[v[k][i].next]--;
d[v[k][i].next]+=(d[k]+v[k][i].value)/size[v[k][i].next];
if(in[v[k][i].next]==0){
q.push(v[k][i].next);
}
}
}
}
int main(){
cin>>n>>m;
for(int i=1,to,ne,si;i<=m;i++){
cin>>to>>ne>>si;
v[to].push_back((node){ne,si});
in[ne]++,size[ne]++;
}
topo();
printf("%.2lf",d[n]);
return 0;
}
希望大佬们指教指教。