Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- void dfs(int v) {
- visited[v] = true;
- sizes[v] = 1;
- for (int i = 0; i < ways[v].size(); i++) {
- if (!visited[ways[v][i]]) {
- dfs(ways[v][i]);
- sizes[v] += sizes[ways[v][i]];
- }
- }
- }
- int find_center(int v, int n, int p) {
- for (int i = 0; i < ways[v].size(); i++) {
- if (!visited[ways[v][i]] && sizes[ways[v][i]] > n / 2 && ways[v][i] != p) {
- return find_center(ways[v][i], n, v);
- }
- }
- return v;
- }
- int build(int v, int n, int last) {
- int center = find_center(v, n, v);
- visited[center] = true;
- p[center] = last;
- for (int i = 0; i < ways[center].size(); i++) {
- if (!visited[ways[center][i]]) {
- int z = build(ways[center][i], n / 2, center);
- }
- }
- return center;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement