1 #include<cstdio>
2 #include<cstdlib>
3 #include<cstring>
4 #include<iostream>
5 #include<algorithm>
6 #include<cmath>
7 using namespace std;
8 #define Maxn 100010
9 #define Maxm 1000010
10
11 struct node
12 {
13 int x,y,c,next,p;
14 }t[Maxm],tt[Maxm];
15 int first[Maxn],len;
16 int d[Maxn];
17
18 int ft[Maxn];
19 void ins(int x,int y,int c)
20 {
21 t[++len].x=x;t[len].y=y;t[len].c=c;
22 t[len].next=first[x];first[x]=len;t[len].p=1;
23 tt[len].x=y;tt[len].y=x;tt[len].c=c;tt[len].next=ft[y];ft[y]=len;
24 }
25
26 bool vis[Maxn];
27 double g[Maxn];
28 void dfs2(int x)
29 {
30 if(vis[x]) return;vis[x]=1;
31 if(x==1) {g[x]=1;return;}
32 for(int i=ft[x];i;i=tt[i].next)
33 {
34 int y=tt[i].y;
35 dfs2(y);
36 g[x]+=g[y]*tt[i].c*1.0/d[y];
37 }
38 }
39
40 double f[Maxn];
41 void dfs(int x)
42 {
43 if(vis[x]) return;vis[x]=1;
44 f[x]=0;
45 for(int i=first[x];i;i=t[i].next) if(t[i].p)
46 {
47 int y=t[i].y;
48 dfs(y);
49 f[x]+=(f[y]+1)*t[i].c*1.0/d[x];
50 }
51 return;
52 }
53
54 int main()
55 {
56 int n,m;
57 scanf("%d%d",&n,&m);
58 len=0;
59 memset(first,0,sizeof(first));
60 memset(ft,0,sizeof(ft));
61 for(int i=1;i<=m;i++)
62 {
63 int x,y,c;
64 scanf("%d%d%d",&x,&y,&c);
65 x++;y++;
66 d[x]+=c;
67 ins(x,y,c);
68 }
69 memset(vis,0,sizeof(vis));
70 for(int i=1;i<=n;i++) g[i]=0;
71 for(int i=1;i<=n;i++) dfs2(i);
72 memset(vis,0,sizeof(vis));
73 dfs(1);
74 double mx=f[1];
75 for(int i=1;i<=len;i++)
76 {
77 int x=t[i].x,y=t[i].y;
78 double ad;
79 if(d[x]!=t[i].c) ad=(f[x]*d[x]*1.0/(d[x]-t[i].c)-(f[y]+1)*t[i].c*1.0/(d[x]-t[i].c))-f[x];
80 else ad=-f[x];
81 mx=max(mx,f[1]+g[x]*ad);
82 }
83 printf("%.6lf\n",mx);
84 return 0;
85 }