template <classT> inlinevoidchmin(T &x, const T &y){ if (x > y) { x = y; } } template <classT> inlinevoidchmax(T &x, const T &y){ if (x < y) { x = y; } }
constint mod = 998244353; // 模数需要根据实际问题调整
// 模意义下 修正 template <classT> inlineintnorm(T x){ x %= mod; return x < 0 ? x + mod : x; }
// 模意义下 加法 inlinevoidadd(int &x, constint &y){ x += y; if (x >= mod) { x -= mod; } } // 模意义下 减法 inlinevoiddec(int &x, constint &y){ x -= y; if (x < 0) { x += mod; } } // 模意义下 取反 inlinevoidneg(int &x){ if (x) { x = mod - x; } } // 模意义下 乘法 inlinevoidmul(int &x, constint &y){ x = 1ll * x * y % mod; }
// 快速幂 constexprintqpow(int a, int b, int p){ int ans = 1; for (; b; b >>= 1) { if (b & 1) ans = 1ll * ans * a % p; a = 1ll * a * a % p; } return ans; }
constint N = 1000100;
int n, m, r;
std::vector<std::vector<int>> G;
int sum[N]; int iskey[N];
voiddfs(int u){ int s = 0; sum[u] = iskey[u]; for (int v : G[u]) { dfs(v); s += sum[v] > 0; sum[u] += sum[v]; }