Lang:G++
Edit12345678910111213141516171819202122232425262728293031#include <iostream>#include <cstdio>#include <map>#include <set>#include <queue>#include <vector>#include <cstring>#include <cstdlib>#include <algorithm>#define rep(i,a,b) for(int i = a; i <= b; i++)#define dep(i,a,b) for(int i = a; i >= b; i--)#define Rep(i,a) for(int i = 0; i < a; i++)#define pb(a) push_back(a)#define mp(a,b) make_pair(a,b)#define ab(x) ((x) < 0 ? -(x) : (x))using namespace std;typedef long long LL;typedef map<int, int>::iterator mit;typedef set<int>::iterator sit;const int N = 100010, mod = 1e9 + 7;struct edge{ int to, pre; }e[N << 1]; int u[N], l = 0;void ins(int a, int b) { e[++l] = (edge){b, u[a]}, u[a] = l; }#define v e[i].to#define reg(i,a) for(int i = u[a]; i; i = e[i].pre)int fa[N], dep[N], pre[N], ed[N], dfn = 0, sz[N];void dfs(int x, int f) {pre[x] = ++dfn, fa[x] = f, dep[x] = dep[f] + 1, sz[x] = 1;reg(i,x) if (v != f) dfs(v, x), sz[x] += sz[v];ed[x] = dfn;