| 11 | void add_edge(int u, int v) { |
| 12 | adj[u].push_back(v); adj[v].push_back(u); } |
| 13 | void update_cost(int u, int v, int c) { |
| 14 | if (parent[v] == u) swap(u, v); assert(parent[u] == v); |
| 15 | values.update(loc[u], c); } |
| 16 | int csz(int u) { |
| 17 | rep(i,0,size(adj[u])) if (adj[u][i] != parent[u]) |
| 18 | sz[u] += csz(adj[parent[adj[u][i]] = u][i]); |