cin >> n; for(int i = 1; i <= n; i ++) cin >> A[i]; for(int i = 1; i < n; i ++) { int a, b; cin >> a >> b; G[a].push_back(b), G[b].push_back(a); } dfs(1, 0); cout << f[1] << '\n';
int n, m; cin >> n >> m; vector<int> ok(n + 1, 0); for(int i = 0; i < m; i ++) { int a, b; cin >> a >> b; if(b == a + 1) ok[a] = 1; } int ans = 0; for(int i = 1; i < n; i ++) ans += ok[i]; cout << (ans == n - 1 ? "Yes" : "No") << '\n';
cin >> n >> m >> V >> S; for(int i = 0; i < m; i ++) { int a, b, c; cin >> a >> b >> c; if(c > V) continue; G[b].push_back({a, c}); G[a].push_back({b, c}); } Dijkstra(); for(int i = 1; i <= n; i ++) cout << (dist[i].first == INF ? -1 : dist[i].first) << " \n"[i == n];
const int N = 55, M = 1e5 + 10, K = 15; const int P = 998244353; inline int Plus(int a, int b) {return a + b >= P ? a + b - P : a + b; } inline int Minus(int a, int b) {return a - b < 0 ? a - b + P : a - b; } inline int ksm(long long a, int b) { long long r = 1; for(; b; b >>= 1, a = a * a % P) if(b & 1) r = r * a % P; return r; } int fac[M], ifac[M]; inline int binom(int a, int b) { if(a >= b) return 1ll * fac[a] * ifac[b] % P * ifac[a - b] % P; else return 0; } int n, m, k, x[N], y[N];
inline int calc(vector<int> v) { int ans = 0; for(int l = -100000 - m; l <= 100000 + m; l ++) { int r = l + k; long long add = 1, sub = 1; for(int x : v) { int A = 0, B = 0; for(int p = l; p <= r; p ++) { int d = p - x; if(abs(d) > m || (m + d) % 2) continue; int y = binom(m, (m + d) / 2); A = Plus(A, y); if(p > l) B = Plus(B, y); } add = add * A % P, sub = sub * B % P; } ans = Plus(ans, add), ans = Minus(ans, sub); } return ans; }
int main() { ios::sync_with_stdio(false), cin.tie(0);
cin >> n >> m >> k; fac[0] = 1; for(int i = 1; i <= m; i ++) fac[i] = 1ll * fac[i - 1] * i % P; ifac[m] = ksm(fac[m], P - 2); for(int i = m; i >= 1; i --) ifac[i - 1] = 1ll * ifac[i] * i % P; for(int i = 1; i <= n; i ++) { int a, b; cin >> a >> b; x[i] = a + b, y[i] = a - b; } vector<int> a(x + 1, x + n + 1), b(y + 1, y + n + 1); cout << 1ll * calc(a) * calc(b) % P << '\n';
constint N = 1e6 + 10, P = 998244353; inlineintPlus(int a, int b){return a + b >= P ? a + b - P : a + b; } inlineintMinus(int a, int b){return a - b < 0 ? a - b + P : a - b; } inlineintksm(longlong a, int b){ longlong r = 1; for(; b; b >>= 1, a = a * a % P) if(b & 1) r = r * a % P; return r; } int fac[N], ifac[N], inv[N], rev[N];
inlinevoidmake_rev(int n){ for(int i = 1; i < n; i ++) rev[i] = (rev[i >> 1] >> 1) | ((i & 1) ? (n >> 1) : 0); } inlinevoidNTT(poly &A, int type){ staticconstint g = 3; // 原根 int n = A.size(); for(int i = 0; i < n; i ++) if(i < rev[i]) swap(A[i], A[rev[i]]); for(int h = 2; h <= n; h <<= 1) { longlong step = ksm(g, (P - 1) / h); if(type == -1) step = ksm(step, P - 2); for(int i = 0; i < n; i += h) { longlong mul = 1; for(int j = i; j < i + (h >> 1); j ++, mul = mul * step % P) { int u = A[j], v = A[j + (h >> 1)] * mul % P; A[j] = Plus(u, v), A[j + (h >> 1)] = Minus(u, v); } } } if(type == -1) { longlong mul = ksm(n, P - 2); for(int i = 0; i < n; i ++) A[i] = A[i] * mul % P; } } poly operator * (poly A, poly B) { int h = 1, siz = (int)A.size() + (int)B.size() - 1; while(h < siz) h <<= 1; A.resize(h, 0), B.resize(h, 0); make_rev(h), NTT(A, 1), NTT(B, 1); for(int i = 0; i < h; i ++) A[i] = 1ll * A[i] * B[i] % P; NTT(A, -1); A.resize(siz); return A; } inlineintbinom(int a, int b){ return (a >= b ? 1ll * fac[a] * ifac[b] % P * ifac[a - b] % P : 0); }
intmain(){ ios::sync_with_stdio(false), cin.tie(0); fac[0] = 1; for(int i = 1; i < N; i ++) fac[i] = 1ll * fac[i - 1] * i % P; ifac[N - 1] = ksm(fac[N - 1], P - 2); for(int i = N - 1; i >= 1; i --) ifac[i - 1] = 1ll * ifac[i] * i % P; for(int i = 1; i < N; i ++) inv[i] = 1ll * ifac[i] * fac[i - 1] % P;
int n, q; cin >> n >> q; vector<vector<int>> ans(n + 1); for(int k = 0; k <= n; k ++) { int M = 0; while(M <= n && k * M <= n) M ++; M --; ans[k].resize(M + 1); poly A(M + 1), B(M + 1); for(int i = 0; i <= M; i ++) { A[i] = 1ll * fac[n] * ifac[n - i] % P * binom(2 * n - (k + 1) * i - 2, n - i - 1) % P; B[M - i] = (i & 1) ? Minus(0, ifac[i]) : ifac[i]; } A = A * B; for(int m = 0; m <= M; m ++) ans[k][m] = 1ll * inv[n] * ifac[m] % P * A[M + m] % P; } if(n == 1) ans[0][1] = 1; while(q --) { int m, k; cin >> m >> k; if(m > n || k > n || 1ll * m * k > n) cout << "0" << '\n'; else cout << ans[k][m] << '\n'; }
cin >> n >> m; for(int i = 1; i < n; i ++) { int a, b, c; cin >> a >> b >> c; G[a].push_back({b, c}), G[b].push_back({a, c}); } vector<pair<int, int>> tel(m); for(int i = 0; i < m; i ++) cin >> tel[i].first >> tel[i].second; dfs(1, 0);
vector<longlong> dp(n + 1, INF); dp[1] = 0; for(int k = 0; k <= n; k ++) { for(auto [u, v, w] : up) dp[v] = min(dp[v], dp[u] + w); for(auto [u, v, w] : down) dp[v] = min(dp[v], dp[u] + w); longlong ans = 0; for(int i = 1; i <= n; i ++) ans += dp[i]; cout << ans << '\n'; vector<longlong> new_dp = dp; for(auto [u, v] : tel) { new_dp[u] = min(new_dp[u], dp[v]); new_dp[v] = min(new_dp[v], dp[u]); } dp = new_dp; }