蒟蒻求助,一直20
查看原帖
蒟蒻求助,一直20
614795
___xyzhao___楼主2022/8/11 08:42

代码如下,用拓补排序做的:

#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;
}

希望大佬们指教指教。

2022/8/11 08:42
加载中...