module main; // https://kmjp.hatenablog.jp/entry/2015/11/07/0900 より import std; void main() { // 入力 int N, M; readln.chomp.formattedRead("%d %d", N, M); auto P = new int[][](N, N); foreach (_; 0 .. M) { int a, b, c; readln.chomp.formattedRead("%d %d %d", a, b, c); P[a][b] = c; } // 答えの計算 double ret = 0; auto yes = new int[](N); // 話す、話さないの組み合わせ foreach (mask; 0 .. 1 << N) { foreach (x; 0 .. N) yes[x] = (mask >> x) & 1; if (yes[0] == 0 || yes[N - 1] == 0) continue; double pat = 1; foreach (x; 1 .. N) { double tmp = 1; foreach (y; 0 .. N) if (yes[y] && P[y][x]) tmp *= (100 - P[y][x]) / 100.0; if (yes[x]) pat *= 1 - tmp; else pat *= tmp; } ret += pat; } // 答えの出力 writefln("%.12f", ret); }