#include <vector>#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>usingnamespacestd;
constint N = 1e5 + 10 ;
struct Edge{
int v , w ;
Edge ( int v=0 , int w=0 ) : v(v) , w(w) {}
};
vector <int> G [N] ;
vector <Edge> edges ;
void addeage ( int u , int v , int w ) {
edges.push_back ( Edge( v , w ) ) ;
int tot = edges.size() ;
G [u].push_back ( tot - 1 ) ;
}
double f [N] ;
int outd [N] , vis [N];
void dfs ( int u , int fa ) {
if ( vis [u] ) return;
vis [u] = 1;
for ( int i = 0 ; i < G [u].size() ; ++ i ) {
int v = edges [ G [u] [i] ].v , w = edges [ G [u] [i] ].w ;
dfs ( v , u ) ;
f [u] += (double) f [v] + w ;
}
if ( outd [u] )
f [u] /= (double)outd [u] ;
}
int main () {
memset ( outd , 0 , sizeof outd ) ;
memset ( f , 0 , sizeof f ) ;
int n , m ;
scanf ( "%d%d" , &n , &m );
for ( int i = 1 ; i <= m ; ++ i ){
int x , y , z ;
scanf ( "%d%d%d" , &x , &y , &z ) ;
addeage ( x , y , z ) ;
outd [x] ++ ;
}
dfs ( 1 , 0 ) ;
printf ( "%.2lf" , f [1] ) ;
return0 ;
}