我期望一直渣的不行 这道题怕是太水了 一开始想着拓扑序一下 然后倒着转移 然后发现直接dfs就是了 直接看代码 很好懂
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+5;
int n,m,tot=1,out[N],head[N];
double dis[N];
bool vis[N];
struct Edge{
int v,nxt,c;
}e[N*2];
inline int read(){
int x=0,f=1;char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
return x*f;
}
void add(int u,int v,int c){
e[++tot].v=v,e[tot].nxt=head[u],head[u]=tot,e[tot].c=c,out[u]++;
}
void dfs(int x){
for(int i=head[x];i;i=e[i].nxt){
int j=e[i].v;
if(!vis[j]){
vis[j]=1;
dfs(j);
}
dis[x]+=dis[j]+e[i].c;
}
if(out[x]) dis[x]/=out[x];
}
int main(){
n=read(),m=read();
for(int i=1,x,y,z;i<=m;i++){
x=read(),y=read(),z=read();
add(x,y,z);
}
dfs(1);
printf("%.2lf",dis[1]);
}