#include <bits/stdc++.h>
#define N 2510
using namespace std;
int m, n, cnt, s[N], head[N];
double res[N], f[N][N];
struct xcj{
double cost, fight;
} a[N];
struct xcx{
int to, nxt;
} e[N];
inline int read(){
int s = 0, w = 1;
char ch = getchar();
for (; ch < '0' || ch > '9'; w *= ch == '-' ? -1 : 1, ch = getchar());
for (; ch >= '0' && ch <= '9'; s = s * 10 + ch - '0', ch = getchar());
return s * w;
}
void add(int x, int y){e[++cnt] = {y, head[x]}, head[x] = cnt;}
void dp(int x, int fa){
s[x] = 1, f[x][1] = res[x];
for (int i = head[x]; i; i = e[i].nxt){
int y = e[i].to;
if (y != fa){
dp(y, x), s[x] += s[y];
for (int j = min(m, s[x]); j > 0; --j)
for (int k = 0; k <= min(j - 1, s[y]); ++k) f[x][j] = max(f[x][j], f[x][j - k] + f[y][k]);//test
}
}
}
bool chck(double mid){
res[0] = 0;
for (int i = 1; i <= n; ++i) res[i] = a[i].fight - mid * a[i].cost;
for (int i = 0; i <= n; ++i)
for (int j = 1; j <= m; ++j) f[i][j] = -1e9;
dp(0, -1);
return f[0][m] >= 0;
}
int main(){
m = read() + 1, n = read();
for (int i = 1; i <= n; ++i) a[i].cost = read(), a[i].fight = read(), add(read(), i);
double l = 0, r = 10000;
while (l < r - 1e-4){
double mid = (l + r) / 2;
if (chck(mid)) l = mid;
else r = mid;
}
printf("%.3lf\n", l);
return 0;
}