Centroid Decomposition
Authors: Siyong Huang, Benjamin Qi
Prerequisites
Decomposing a tree to faciliate path computations.
Introduction
Focus Problem – read through this problem before continuing!
Centroid Decomposition is a divide and conquer technique for trees. The centroid of a tree is a node which, if rooted, results in no other nodes having a subtree of size greater than . Centroid Decomposition works by repeated splitting the tree and each of the resulting subgraphs at the centroid, producing layers of subgraphs.
Resources | |||
---|---|---|---|
Carpanese | how to solve above problem | ||
CF | blog + video for above problem. LCA isn't necessary though. | ||
GFG |
Implementation
General centroid code is shown below.
This section is not complete.
Ben - this is not easy to understand :/
C++
bool r[MN];//removedint s[MN];//subtree sizeint dfs(int n, int p = 0){s[n] = 1;for(int x : a[n])if(x != p && !r[x])s[n] += dfs(x, n);return s[n];}
Java
boolean[] r = new boolean[MN];//removedint[] s = new int[MN];//subtree sizepublic int dfs(int n, int p){s[n] = 1;for(int x : a[n])if(x != p && !r[x])s[n] += dfs(x, n);return s[n];}
Solution - Xenia & Tree
#include <cstdio>#include <cstring>#include <vector>template<typename T> bool ckmin(T& a, const T& b){return b<a?a=b,1:0;}const int MN = 1e5+10, INF = 0x3f3f3f3f;int N, M, s[MN], m[MN][2], t, b, d;bool r[MN], red[MN];
Problems
Status | Source | Problem Name | Difficulty | Tags | Solution | URL |
---|---|---|---|---|---|---|
CSES | Very Easy | |||||
CF | Easy | Show TagsCentroid | Check CF | |||
Baltic OI | Easy | Show TagsCentroid | Check CF | |||
CSES | Easy | Show TagsCentroid | ||||
CSES | Easy | Show TagsBIT, Centroid | ||||
IOI | Normal | Show TagsCentroid, Merging | External Sol | |||
Plat | Normal | Show TagsCentroid | External Sol | |||
CF | Normal | Show TagsCentroid | Check CF | |||
CF | Normal | Show TagsCentroid, NT | Check CF | |||
CF | Normal | Show TagsCentroid, DP | Check CF | |||
JOI | Normal | Show TagsCentroid | External Sol | |||
DMOJ | Hard | Show TagsCentroid | ||||
DMOJ | Hard | Show TagsCentroid | ||||
JOI | Hard | Show TagsCentroid, Small to Large | ||||
Plat | Very Hard | Show TagsCentroid | External Sol |
Module Progress:
Join the USACO Forum!
Stuck on a problem, or don't understand a module? Join the USACO Forum and get help from other competitive programmers!