제출 #319164

#제출 시각아이디문제언어결과실행 시간메모리
319164VodkaInTheJar무제 (POI11_dyn)C++14
20 / 100
28 ms3932 KiB
#include <bits/stdc++.h> #pragma GCC optimize("O3") #define endl '\n' using namespace std; const int maxn = 1003; int n, m; vector <int> v; vector <int> adj[maxn]; void read() { cin >> n >> m; for (int i = 1; i <= n; i++) { bool is; cin >> is; if (is) v.push_back(i); } for (int i = 1; i <= n-1; i++) { int a, b; cin >> a >> b; adj[a].push_back(b); adj[b].push_back(a); } } int dist[maxn][maxn]; void dfs(int start, int ver, int par) { for (auto i: adj[ver]) if (i != par) { dist[start][i] = dist[start][ver] + 1; dfs(start, i, ver); } } int cnt[maxn]; void remove_vertex(int ver, int x) { for (int i = 1; i <= n; i++) if (dist[ver][i] <= x) cnt[i]--; } bool used[maxn], is_covered[maxn]; bool can(int x) { priority_queue <pair <int, int> > q; for (int i = 1; i <= n; i++) { cnt[i] = 0; for (auto j: v) if (dist[j][i] <= x) cnt[i]++; } for (int i = 1; i <= n; i++) used[i] = false; for (auto i: v) is_covered[i] = false; for (int i = 1; i <= m; i++) { int maxs = -1, idx = -1; for (int j = 1; j <= n; j++) if (!used[j]) if (cnt[j] > maxs) maxs = cnt[j], idx = j; used[idx] = true; for (auto i: v) if (!is_covered[i] && dist[idx][i] <= x) { is_covered[i] = true; remove_vertex(i, x); } } for (auto i: v) if (!is_covered[i]) return false; return true; } void solve() { for (int i = 1; i <= n; i++) { dist[i][i] = 0; dfs(i, i, -1); } int low = 0, high = n; while (low < high) { int mid = (low + high) / 2; if (can(mid)) high = mid; else low = mid+1; } cout << low << endl; } int main() { ios_base::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); read(); solve(); }
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...