classSolution { intN=50010, M = N * 2, idx = 0; int[] he = newint[N], e = newint[M], ne = newint[M], w = newint[M]; voidadd(int a, int b, int c) { e[idx] = b; ne[idx] = he[a]; w[idx] = c; he[a] = idx++; } publicintminReorder(int n, int[][] connections) { Arrays.fill(he, -1); for (int[] info : connections) { inta= info[0], b = info[1]; add(a, b, 1); add(b, a, 0); } return dfs(0, -1); } intdfs(int u, int fa) { intans=0; for (inti= he[u]; i != -1; i = ne[i]) { intj= e[i]; if (j == fa) continue; ans += w[i] + dfs(j, u); } return ans; } }
classSolution { public: int N = 50010, M = N * 2, idx = 0; int he[50010], e[100020], ne[100020], w[100020]; voidadd(int a, int b, int c){ e[idx] = b; ne[idx] = he[a]; w[idx] = c; he[a] = idx++; } intminReorder(int n, vector<vector<int>>& connections){ memset(he, -1, sizeof(he)); for (auto& info : connections) { int a = info[0], b = info[1]; add(a, b, 1); add(b, a, 0); } returndfs(0, -1); } intdfs(int u, int fa){ int ans = 0; for (int i = he[u]; i != -1; i = ne[i]) { int j = e[i]; if (j == fa) continue; ans += w[i] + dfs(j, u); } return ans; } };
classSolution: defminReorder(self, n: int, connections: List[List[int]]) -> int: N, M, idx = n + 10, (n + 10) * 2, 0 he, e, ne, w = [-1] * N, [0] * M, [0] * M, [0] * M