Submission #1182139

#TimeUsernameProblemLanguageResultExecution timeMemory
1182139avighnaDesignated Cities (JOI19_designated_cities)C++20
6 / 100
2095 ms589824 KiB
#include <bits/stdc++.h> int main() { std::ios_base::sync_with_stdio(false); std::cin.tie(nullptr); int n; std::cin >> n; std::vector w(n + 1, std::vector<long long>(n + 1)); long long tot = 0; for (int i = 0, a, b, c, d; i < n - 1; ++i) { std::cin >> a >> b >> c >> d; w[a][b] = c; w[b][a] = d; tot += c + d; } std::vector<std::set<std::pair<int, int>>> edges(n + 1); for (int i = 1; i <= n; ++i) { auto dfs = [&](auto &&self, int u, int p) -> void { for (int c = 1; c <= n; ++c) { if (c == p or w[u][c] == 0) { continue; } edges[i].insert({c, u}); self(self, c, u); } }; dfs(dfs, i, 0); } std::vector<long long> ans(n + 1); for (int mask = 0; mask < (1 << n); ++mask) { std::set<std::pair<int, int>> st; for (int i = 0; i < n; ++i) { if (mask & (1 << i)) { for (auto &e : edges[i + 1]) { st.insert(e); } } } long long best = 0; for (auto &i : st) { best += w[i.first][i.second]; } ans[__builtin_popcount(mask)] = std::max(ans[__builtin_popcount(mask)], best); } int q; std::cin >> q; while (q--) { int x; std::cin >> x; std::cout << tot - ans[x] << '\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...