#include <iostream>
#include <iomanip>
#include <vector>
using namespace std;
const int maxn = 2500 + 10;
const int inf = 1e8;
const double eps = 1e-5;
int n, k, tot, a[maxn], b[maxn], id[maxn], sz[maxn];
double f[maxn][maxn];
vector<int> e[maxn];
void dfs(int u) {
sz[u] = 1;
for (int v : e[u]) dfs(v), sz[u] += sz[v];
id[++tot] = u;
}
bool check(double x) {
for (int u = 0; u <= n; u++)
for (int i = 1; i <= k; i++) f[u][i] = -inf;
for (int i = 1; i <= n; i++) f[i][1] = a[id[i]] - x * b[id[i]];
for (int i = 1; i <= n; i++)
for (int j = 2; j <= k; j++)
f[i][j] = max(f[i - 1][j - 1] + f[i][1], f[i - sz[id[i]]][j]);
return f[n][k] >= 0;
}
int main() {
ios::sync_with_stdio(false);
cin >> k >> n;
for (int i = 1, x; i <= n; i++) cin >> b[i] >> a[i] >> x, e[x].push_back(i);
dfs(0); double l = 0, r = inf;
while (r - l > eps) {
double mid = (l + r) / 2;
if (check(mid)) l = mid;
else r = mid;
}
cout << fixed << setprecision(3) << l << '\n';
return 0;
}