Submission #132529

#TimeUsernameProblemLanguageResultExecution timeMemory
132529Just_Solve_The_ProblemElection Campaign (JOI15_election_campaign)C++11
10 / 100
870 ms19932 KiB
#include <bits/stdc++.h> using namespace std; const int N = (int)1e5 + 7; vector <int> gr[N]; int n, m; vector <tuple<int, int, int>> vec; int tin[N], tout[N], lc[17][N]; int tiktak; vector <int> order; void dfs(int v, int pr) { tin[v] = ++tiktak; lc[0][v] = pr; order.push_back(v); for (int i = 1; i < 17; i++) { lc[i][v] = lc[i - 1][lc[i - 1][v]]; } for (int to : gr[v]) { if (to == pr) continue; dfs(to, v); } order.push_back(v); tout[v] = ++tiktak; } bool upper(int a, int b) { return tin[a] <= tin[b] && tout[a] >= tout[b]; } int lca(int a, int b) { if (upper(a, b)) return a; if (upper(b, a)) return b; for (int i = 16; i >= 0; i--) { if (!upper(lc[i][a], b)) a = lc[i][a]; } return lc[0][a]; } bool check(int i, int j) { int a, b, c, d, val = 0; tie(a, b) = make_tuple(get<0>(vec[i]), get<1>(vec[i])); tie(c, d) = make_tuple(get<0>(vec[j]), get<1>(vec[j])); int lc = lca(c, d); if (upper(a, b)) { val = (tin[a] <= tin[c] && tin[c] <= tin[b]); val ^= (tin[a] <= tout[c] && tout[c] <= tin[b]); if (val) return 0; val = (tin[a] <= tin[d] && tin[d] <= tin[b]); val ^= (tin[a] <= tout[d] && tout[d] <= tin[b]); if (val) return 0; val = (tin[a] <= tin[lc] && tin[lc] <= tin[b]); val ^= (tin[a] <= tout[lc] && tout[lc] <= tin[b]); if (val) return 0; } else { val = (tout[a] <= tin[c] && tin[c] <= tin[b]); val ^= (tout[a] <= tout[c] && tout[c] <= tin[b]); if (val) return 0; val = (tout[a] <= tin[d] && tin[d] <= tin[b]); val ^= (tout[a] <= tout[d] && tout[d] <= tin[b]); if (val) return 0; val = (tout[a] <= tin[lc] && tin[lc] <= tin[b]); val ^= (tout[a] <= tout[lc] && tout[lc] <= tin[b]); if (val) return 0; int lc1 = lca(a, b); if (lc1 == a || lc1 == b || lc1 == lc) return 0; } return 1; } int ans; main() { scanf("%d", &n); for (int i = 1; i < n; i++) { int u, v; scanf("%d %d", &u, &v); gr[u].push_back(v); gr[v].push_back(u); } dfs(1, 1); scanf("%d", &m); for (int i = 0; i < m; i++) { int u, v, w; scanf("%d %d %d", &u, &v, &w); if (tin[u] > tin[v]) swap(u, v); vec.push_back({u, v, w}); } for (int mask = 1; mask < (1 << m); mask++) { vector <int> v; for (int j = 0; j < m; j++) { if ((mask >> j) & 1) { v.push_back(j); } } bool ok = 1; for (int i = 0; i < v.size(); i++) { for (int j = 0; j < v.size(); j++) { if (i == j) continue; ok &= check(v[i], v[j]); } } if (ok) { int res = 0; for (int &to : v) { res += get<2>(vec[to]); } ans = max(ans, res); } } printf("%d\n", ans); }

Compilation message (stderr)

election_campaign.cpp:75:6: warning: ISO C++ forbids declaration of 'main' with no type [-Wreturn-type]
 main() {
      ^
election_campaign.cpp: In function 'int main()':
election_campaign.cpp:99:23: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for (int i = 0; i < v.size(); i++) {
                     ~~^~~~~~~~~~
election_campaign.cpp:100:25: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
       for (int j = 0; j < v.size(); j++) {
                       ~~^~~~~~~~~~
election_campaign.cpp:76:8: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   scanf("%d", &n);
   ~~~~~^~~~~~~~~~
election_campaign.cpp:79:10: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
     scanf("%d %d", &u, &v);
     ~~~~~^~~~~~~~~~~~~~~~~
election_campaign.cpp:84:8: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   scanf("%d", &m);
   ~~~~~^~~~~~~~~~
election_campaign.cpp:87:10: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
     scanf("%d %d %d", &u, &v, &w);
     ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~
#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...