제출 #1294547

#제출 시각아이디문제언어결과실행 시간메모리
1294547NValchanovMeetings 2 (JOI21_meetings2)C++20
4 / 100
4089 ms672 KiB
#include <iostream> #include <vector> using namespace std; const int MAXN = 2e5 + 10; int n; vector < int > adj[MAXN]; bool chosen[MAXN]; vector < int > meeting[MAXN]; vector < int > locs[MAXN]; int ans[MAXN]; void read() { cin >> n; for(int i = 1; i < n; i++) { int u, v; cin >> u >> v; adj[u].push_back(v); adj[v].push_back(u); } } int dfs(int u, int p, int d) { int result = 0; if(chosen[u]) result += d; for(int v : adj[u]) { if(v == p) continue; result += dfs(v, u, d + 1); } return result; } void solve() { for(int mask = 0; mask < (1 << n); mask++) { int type = __builtin_popcount(mask); if(type == 0) continue; vector < int > meet; for(int i = 1; i <= n; i++) { chosen[i] = (bool)(mask & (1 << (i - 1))); if(mask & (1 << (i - 1))) meet.push_back(i); } vector < int > min_locs; int mind = n * n; for(int l = 1; l <= n; l++) { int cur = dfs(l, l, 0); if(cur < mind) { mind = cur; min_locs.clear(); } if(cur == mind) { min_locs.push_back(l); } } if(ans[type] < min_locs.size()) { ans[type] = min_locs.size(); locs[type] = min_locs; meeting[type] = meet; } } for(int type = 1; type <= n; type++) { cout << ans[type] << endl; } } int main() { read(); solve(); return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...