树上DFS
基础板子
树上$DFS$一次性维护信息
$g$ : 邻接矩阵存储边的信息
$dep$ : 结点的深度
$fa$ : 父节点
$siz$ : 子节点个数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
| const int N = 200000 + 5; vector<int> g[N]; int n; int fa[N], dep[N], siz[N];
void dfs(int u, int p){ fa[u] = p; dep[u] = dep[p] + 1; siz[u] = 1;
for(int v : g[u]){ if(v == p) continue; dfs(v, u); siz[u] += siz[v]; } }
void solve(){ cin >> n; for(int i=1;i<=n;i++){ g[i].clear(); }
for(int i=1;i<n;i++){ int u,v; cin >> u >> v; g[u].push_back(v); g[v].push_back(u); }
dep[0] = 0; dfs(1, 0); }
|