/tmp/solutions/build/tree_diameter-main.cpp:
    1|       |#include <common.h>
    2|       |prelude;
    3|       |
    4|       |namespace {
    5|       |
    6|       |constexpr int N = 5e5;
    7|       |
    8|       |struct {
    9|       |  int to;
   10|       |  int len;
   11|       |  int nxt;
   12|       |} edge[N * 2];
   13|       |int pa[N];
   14|       |int head[N];
   15|       |
   16|    106|def tree_diameter(int u, int p) -> std::pair<u64, int> {
   17|    106|  pa[u] = p;
   18|    106|  std::pair<u64, int> ans{0, u};
   19|    314|  for (int e = head[u]; e; e = edge[e].nxt) {
                                         ^208
  ------------------
  |  Branch (19:25): [True: 66.24%, False: 33.76%]
  ------------------
   20|    208|    int v = edge[e].to;
   21|    208|    int len = edge[e].len;
   22|    208|    if (v != p) {
  ------------------
  |  Branch (22:9): [True: 50.00%, False: 50.00%]
  ------------------
   23|    104|      def res = tree_diameter(v, u);
   24|    104|      res.first += len;
   25|    104|      ans = std::max(ans, res);
   26|    104|    }
   27|    208|  }
   28|    106|  return ans;
   29|    106|}
   30|       |
   31|       |} // namespace
   32|       |
   33|      1|int main() {
   34|      1|  rd rd;
   35|      1|  wt wt;
   36|      1|  int n = rd.uh();
   37|      1|#ifdef LOCAL
   38|      1|  std::memset(head, 0, 4 * n);
   39|      1|#endif
   40|     53|  for (int i = 1; i < n; ++i) {
                                       ^52
  ------------------
  |  Branch (40:19): [True: 98.11%, False: 1.89%]
  ------------------
   41|     52|    int a = rd.uh();
   42|     52|    int b = rd.uh();
   43|     52|    int c = rd.uw();
   44|     52|    edge[i * 2 | 0] = {b, c, head[a]}, head[a] = i * 2 | 0;
   45|     52|    edge[i * 2 | 1] = {a, c, head[b]}, head[b] = i * 2 | 1;
   46|     52|  }
   47|      1|  let[_, u] = tree_diameter(0, -1);
   48|      1|  let[d, v] = tree_diameter(u, -1);
   49|      1|  int c = 0;
   50|     13|  for (int i = v; i != -1; i = pa[i]) ++c;
                                         ^12        ^12
  ------------------
  |  Branch (50:19): [True: 92.31%, False: 7.69%]
  ------------------
   51|      1|  wt.ud(d);
   52|      1|  wt.uw(c);
   53|     13|  for (int i = v; i != -1; i = pa[i]) wt.uw(i);
                                         ^12        ^12
  ------------------
  |  Branch (53:19): [True: 92.31%, False: 7.69%]
  ------------------
   54|      1|  return 0;
   55|      1|}