Submission #1151173

#TimeUsernameProblemLanguageResultExecution timeMemory
1151173vladiliusStar Trek (CEOI20_startrek)C++20
0 / 100
9 ms328 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 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<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]; }; vector<int> f(n + 1); int c1 = 0, c0 = 0; for (int i = 1; i <= n; i++){ dfs(i, 0); f[i] = h[i]; if (f[i]) c1++; else c0++; } dfs(1, 0); vector<vector<bool>> dp(n + 1, vector<bool>(2)); function<void(int)> fill = [&](int v){ if (v == 1){ dp[1][1] = 1; dp[1][0] = 0; } else { int s = 1; for (int i: g[p[v]]){ if (i == p[p[v]] || i == v) continue; s = min(s, h[i]); } s = !s; 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 (i != p[j]){ s = min(s, h[j]); } } s = !s; if (dp[i][s]){ out += c1; } if (dp[i][1]){ out += c0; } } 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...