using i64 = longlong; using u64 = unsignedlonglong; using u32 = unsigned; using u128 = unsigned __int128;
structDSU { int n; vector<int> p, sz; DSU(int n_) { n = n_; init(n); } voidinit(int n){ p.resize(n + 1); sz.resize(n + 1, 1); iota(p.begin() + 1, p.end(), 1); } intfind(int x){ while (x != p[x]) { x = p[x] = p[p[x]]; } return x; } boolmerge(int x, int y){ x = find(x); y = find(y); if (x == y) { returnfalse; } if (sz[x] > sz[y]) { swap(x, y); } sz[y] += sz[x]; p[x] = y; returntrue; } boolsame(int x, int y){ returnfind(x) == find(y); } intsize(int x){ return sz[find(x)]; } };
voidsolve(){ int n, m; cin >> n >> m; DSU dsu(n); int cnt = 0; for (int i = 1; i <= m; i++) { int x, y; cin >> x >> y; if (!dsu.same(x, y)) { dsu.merge(x, y); } else { cnt++; } } cout << cnt << "\n"; }
signedmain(){ ios::sync_with_stdio(false); cin.tie(0); int t = 1; // cin >> t; while (t--) { solve(); } return0; }
using i64 = longlong; using u64 = unsignedlonglong; using u32 = unsigned; using u128 = unsigned __int128;
voidsolve(){ int n, m; cin >> n >> m; vector<bool> vis(n + 1); vector<vector<int>> e(n + 1); for (int i = 1; i <= m; i++) { int x, y; cin >> x >> y; e[x].push_back(y); e[y].push_back(x); } int ans = m; auto dfs = [&](auto dfs, int x, int fa) -> void { vis[x] = true; for (auto y : e[x]) { if (y == fa) { continue; } if (!vis[y]) { dfs(dfs, y, x); ans--; } } }; for (int i = 1; i <= n; i++) { if (!vis[i]) { dfs(dfs, i, 0); } } cout << ans << "\n"; }
signedmain(){ ios::sync_with_stdio(false); cin.tie(0); int t = 1; // cin >> t; while (t--) { solve(); } return0; }
for (int i = n + 1; i <= m; i++) { _fac[i] = _fac[i - 1] * i; } _invfac[m] = _fac[m].inv(); for (int i = m; i > n; i--) { _invfac[i - 1] = _invfac[i] * i; _inv[i] = _invfac[i] * _fac[i - 1]; } n = m; }
Z fac(int m){ if (m > n) init(2 * m); return _fac[m]; } Z invfac(int m){ if (m > n) init(2 * m); return _invfac[m]; } Z inv(int m){ if (m > n) init(2 * m); return _inv[m]; } Z binom(int n, int m){ if (n < m || m < 0) return0; returnfac(n) * invfac(m) * invfac(n - m); } } comb(10);
voidsolve(){ int n, k; cin >> n >> k; vector<int> a(n + 1); vector<vector<Z>> p(n + 1, vector<Z>(k + 1, Z(1))), p2(n + 1, vector<Z>(k + 1, Z(1))); for (int i = 1; i <= n; i++) { cin >> a[i]; p[i][1] = p[i - 1][1] + a[i]; p[i][0] = 1; } for (int i = 1; i <= n; i++) { for (int j = 1; j <= k; j++) { p[i][j] = p[i][j - 1] * p[i][1]; } }
for (int i = 1; i <= n; i++) { for (int j = 0; j <= k; j++) { p2[i][j] = p2[i - 1][j] + p[i][j]; } }
Z ans = 0; for (int i = 1; i <= n; i++) { for (int j = 0; j <= k; j++) { if ((k - j) % 2 == 1) { ans += Z(-1) * comb.binom(k, j) * p[i][j] * p2[i - 1][k - j]; } else { ans += Z(1) * comb.binom(k, j) * p[i][j] * p2[i - 1][k - j]; } } } cout << ans << "\n"; }
signedmain(){ ios::sync_with_stdio(false); cin.tie(0); int t = 1; // cin >> t; while (t--) { solve(); } return0; }