제출 #1142307

#제출 시각아이디문제언어결과실행 시간메모리
1142307am_aadvikElection Campaign (JOI15_election_campaign)C++20
10 / 100
469 ms327680 KiB
#include <iostream> #include<cstring> #include<vector> using namespace std; vector<int> g[100005]; bool ok[20][20]; int done[100005]; bool dfs(int node, int par, int t) { done[node]++; if (node == t) return 1; for (auto x : g[node]) if (x != par) if (dfs(x, node, t)) return 1; done[node]--; return 0; } int main() { int n; cin >> n; for (int i = 1; i < n; ++i) { int u, v; cin >> u >> v; g[u].push_back(v); g[v].push_back(u); } int m; cin >> m; vector<pair<int, int>> q(m); vector<int> c(m); for (int i = 0; i < m; ++i) cin >> q[i].first >> q[i].second >> c[i]; for(int i = 0; i < m; ++i) for (int j = i + 1; j < m; ++j){ dfs(q[i].first, -1, q[i].second); dfs(q[j].first, -1, q[j].second); bool y = 1; for (int i = 1; i <= n; ++i) if (done[i] > 1) y = 0; ok[i][j] = ok[j][i] = y; memset(done, 0, sizeof(done)); } int ans = 0; for (int i = 0; i < (1 << m); ++i) { vector<int> a; for (int j = 0; j < m; ++j) if (i & (1 << j)) a.push_back(j); bool y = 1; for (int x = 0; x < a.size(); ++x) for (int j = x + 1; j < a.size(); ++j) if (!ok[a[x]][a[j]]) y = 0; if (!y) continue; int cur = 0; for (auto x : a) cur += c[x]; ans = max(ans, cur); } cout << ans; }
#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...