static long WeightedDiameter(int n, int root, int[][] ues) { var tree = new WeightedTree(n, root, ues); var(mv, md) = (-1, -1L); for (int v = 0; v < n; v++) { var d = tree.Costs[v]; if (md < d) { (mv, md) = (v, d); } } return(new WeightedTree(n, mv, tree.Map).Depths.Max()); }
static bool Solve() { var(n, x) = Read2(); var es = Array.ConvertAll(new bool[n - 1], _ => Read()); var map = WeightedTree.ToMap(n + 1, es, false); for (int i = 1; i <= n; i++) { var tree = new WeightedTree(n + 1, i, map); if (tree.Costs.Contains(x)) { return(true); } } return(false); }