classSolution { public: staticconstint N = 100010; vector<int> G[N];
intnumOfMinutes(int n, int headID, vector<int>& manager, vector<int>& informTime){ for (int i = 0; i < n; ++i) { if (manager[i] != -1) { G[manager[i]].push_back(i); } } returnf(headID, informTime); }
intf(int headID, vector<int>& informTime){ if (!informTime[headID]) return0; int maxx = 0; for (int i = 0, sz = G[headID].size(); i < sz; ++i) { maxx = max(maxx, f(G[headID][i], informTime)); } return maxx+informTime[headID]; } };
classSolution { public: doublefrogPosition(int n, vector<vector<int>>& edges, int t, int target){ if (n == 1) return1.0; vector<vector<int>> G(110); for (int i = 0; i < n-1; ++i) { int u = edges[i][0], v = edges[i][1]; G[u].push_back(v); G[v].push_back(u); } returndfs(1, 0, t, target, G); }
doubledfs(int u, int fa, int t, int target, vector<vector<int>>& G){ int sz = G[u].size(); if (!t || (fa && sz == 1)) { if (u == target) return1; elsereturn0; } double p = 1.0 / (fa ? sz-1 : sz), maxx = 0; for (int i = 0, sz = G[u].size(); i < sz; ++i) { int v = G[u][i]; if (v == fa) continue; maxx = max(maxx, dfs(v, u, t-1, target, G)); } return p*maxx; } };