题目:
十分裸的裸题。甚至是有向无环图。
#include#include #include #include using namespace std;const int N=1e5+5;int n,m,du[N],tp[N],head[N];double f[N];queue q;struct Edge{ int next,to,w; Edge(int n=0,int t=0,int w=0):next(n),to(t),w(w) {}}edge[N<<1];int main(){ scanf("%d%d",&n,&m);int x,y,z; for(int i=1;i<=m;i++) { scanf("%d%d%d",&x,&y,&z);du[x]++; edge[i]=Edge(head[y],x,z);head[y]=i; } for(int i=1;i<=n;i++) { tp[i]=du[i]; if(!du[i])q.push(i); } while(q.size()) { int k=q.front();q.pop(); for(int i=head[k];i;i=edge[i].next) { f[edge[i].to]+=((f[k]+edge[i].w)*1.0)/du[edge[i].to]; tp[edge[i].to]--;if(!tp[edge[i].to])q.push(edge[i].to); } } printf("%.2lf",f[1]); return 0;}