Submission #1151189

#TimeUsernameProblemLanguageResultExecution timeMemory
1151189vladiliusStar Trek (CEOI20_startrek)C++20
45 / 100
58 ms26184 KiB
#include <bits/stdc++.h> using namespace std; using ll = long long; using pii = pair<int, int>; #define pb push_back #define ff first #define ss second const int mod = 1e9 + 7; int main(){ ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); int n; ll d; cin>>n>>d; vector<int> g[n + 1]; for (int i = 1; i < n; i++){ int u, v; cin>>u>>v; g[u].pb(v); g[v].pb(u); } if (n == 2){ int out = 4, pr = 4; d--; while (d > 0){ if (d & 1){ out = (1LL * out * pr) % mod; } pr = (1LL * pr * pr) % mod; d >>= 1; } cout<<out<<"\n"; return 0; } vector<int> h(n + 1), p(n + 1); function<void(int, int)> dfs = [&](int v, int pr){ h[v] = 1; p[v] = pr; for (int i: g[v]){ if (i == pr) continue; dfs(i, v); h[v] = min(h[v], h[i]); } h[v] = !h[v]; }; dfs(1, 0); vector<int> f(n + 1), t = h; function<void(int)> rr = [&](int v){ f[v] = t[v]; int s = 0, x = 0; for (int i: g[v]){ if (!t[i]){ s++; x = i; } } for (int i: g[v]){ if (i == p[v]) continue; int tv = t[v], ti = t[i]; if (s == 1 && i == x){ t[v] = 0; } t[i] = 1; for (int j: g[i]){ t[i] = min(t[i], t[j]); } t[i] = !t[i]; rr(i); t[v] = tv; t[i] = ti; } }; rr(1); int c1 = 0, c0 = 0; for (int i = 1; i <= n; i++){ if (f[i]) c1++; else c0++; } vector<vector<bool>> dp(n + 1, vector<bool>(2)); vector<int> s(n + 1), x(n + 1); for (int i = 1; i <= n; i++){ for (int j: g[i]){ if (j == p[i]) continue; if (!h[j]){ s[i]++; x[i] = j; } } } function<void(int)> fill = [&](int v){ if (v == 1){ dp[1][1] = 1; dp[1][0] = 0; } else { int S; if (!s[p[v]]){ S = 0; } else { if (s[p[v]] == 1 && v == x[p[v]]){ S = 0; } else { S = 1; } } dp[v][1] = dp[p[v]][S]; dp[v][0] = dp[p[v]][1]; } for (int i: g[v]){ if (i == p[v]) continue; fill(i); } }; fill(1); ll out = 0; for (int i = 1; i <= n; i++){ int s = 1; for (int j: g[i]){ if (j != p[i]){ s = min(s, h[j]); } } s = !s; if (dp[i][s]){ out += c1; } if (dp[i][1]){ out += c0; } } out %= mod; cout<<out<<"\n"; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...