Submission #1151298

#TimeUsernameProblemLanguageResultExecution timeMemory
1151298vladiliusStar Trek (CEOI20_startrek)C++20
23 / 100
1099 ms327680 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); } vector<vector<int>> p(n + 1, vector<int>(n + 1)), h(n + 1, vector<int>(n + 1)); function<void(int, int, int&)> fill = [&](int v, int pr, int& u){ p[u][v] = pr; h[u][v] = 1; for (int i: g[v]){ if (i == pr) continue; fill(i, v, u); h[u][v] = min(h[u][v], h[u][i]); } h[u][v] = !h[u][v]; }; for (int i = 1; i <= n; i++){ fill(i, 0, i); } vector<vector<vector<bool>>> f(n + 1, vector<vector<bool>>(n + 1, vector<bool>(2))); function<void(int, int&)> dfs = [&](int v, int& u){ int s = 0, x = 0; for (int i: g[v]){ if (i == p[u][v]) continue; if (!h[u][i]){ s++; x = i; } } for (int i: g[v]){ if (i == p[u][v]) continue; f[u][i][0] = f[u][v][1]; if (!s || (s == 1 && i == x)){ f[u][i][1] = f[u][v][0]; } else { f[u][i][1] = f[u][v][1]; } dfs(i, u); } }; for (int i = 1; i <= n; i++){ f[i][i][0] = 0; f[i][i][1] = 1; dfs(i, i); } vector<vector<int>> dp(n + 1, vector<int>(2)); vector<int> c1(n + 1), c0(n + 1); for (int i = 1; i <= n; i++){ dp[i][h[i][i]] = 1; for (int j = 1; j <= n; j++){ if (f[i][j][1]){ c1[i]++; } else { c0[i]++; } } } for (int i = 1; i <= d; i++){ vector<vector<int>> dp1(n + 1, vector<int>(2)); int s1 = 0, s0 = 0; for (int x = 1; x <= n; x++){ s1 = (s1 + dp[x][1]) % mod; s0 = (s0 + dp[x][0]) % mod; } for (int v = 1; v <= n; v++){ dp1[v][h[v][v]] = (dp1[v][h[v][v]] + 1LL * s1 * n) % mod; dp1[v][0] = (dp1[v][0] + 1LL * c0[v] * s0) % mod; dp1[v][1] = (dp1[v][1] + 1LL * c1[v] * s0) % mod; } dp = dp1; } cout<<dp[1][1]<<"\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...