Submission #963246

# Submission time Handle Problem Language Result Execution time Memory
963246 2024-04-14T19:18:39 Z BhavayGoyal Election Campaign (JOI15_election_campaign) C++14
10 / 100
128 ms 40328 KB
#include <bits/stdc++.h>
using namespace std;

#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
using namespace __gnu_pbds;

template<class T> using oset = 
            tree<T, null_type, less<T>, rb_tree_tag, tree_order_statistics_node_update>;

#define ll long long
#define ld long double
#define ar array
#define vi vector<int>
#define vii vector<vector<int>>
#define pii pair<int, int>
#define pb push_back
#define all(x) x.begin(), x.end()
#define f first
#define s second
#define endl "\n"

const int MOD = 1e9+7;
const int inf = 1e9;
const ll linf = 1e18;

const int d4i[4]={-1, 0, 1, 0}, d4j[4]={0, 1, 0, -1};
const int d8i[8]={-1, -1, 0, 1, 1, 1, 0, -1}, d8j[8]={0, 1, 1, 1, 0, -1, -1, -1};

mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());


// -------------------------------------------------- Main Code --------------------------------------------------

struct fenTree {
    int n;
    vi tree;

    fenTree(int N) {n = N+5; tree = vi(n+5);}

    void update(int idx, int val) {idx++; for (idx; idx <= n; idx += (idx&-idx)) tree[idx] += val;}
    int sum(int idx) {idx++; int ans = 0; for (idx; idx; idx -= (idx&-idx)) ans += tree[idx]; return ans;}
};

const int N = 1e5+5;
vi g[N];
int parent[N][20], tin[N], tout[N], Time = 0, depth[N], dp[N][2];
vector<array<int, 3>> arr[N];
fenTree Tree(N);

void dfs2(int src, int par) {
    tin[src] = ++Time;
    parent[src][0] = par;
    for (int j = 1; j < 20; j++) parent[src][j] = parent[parent[src][j-1]][j-1];
    for (auto ch : g[src]) {
        if (ch == par) continue;
        depth[ch] = depth[src]+1;
        dfs2(ch, src);
    }
    tout[src] = ++Time;
}


int lca(int a, int b) {
    if (depth[a] > depth[b]) swap(a, b);
    int diff = depth[b]-depth[a];
    for (int j = 0; j < 20; j++) {
        if (diff&(1<<j)) b = parent[b][j];
    }

    if (a == b) return a;

    for (int j = 19; j >= 0; j--) {
        if (parent[a][j] != parent[b][j]) {
            a = parent[a][j];
            b = parent[b][j];
        }
    }

    return parent[a][0];
}

void dfs(int src, int par) {
    for (auto ch : g[src]) {
        if (ch == par) continue;
        dfs(ch, src);
        dp[src][0] += dp[ch][1];
    }

    dp[src][1] = dp[src][0];
    for (auto x : arr[src]) {
        int a = x[0], b = x[1], votes = x[2];
        dp[src][1] = max(dp[src][1], dp[src][0] + Tree.sum(tin[a]) + Tree.sum(tin[b]) + votes);
    }

    Tree.update(tin[src], dp[src][0]-dp[src][1]);
    Tree.update(tout[src], dp[src][1]-dp[src][0]);
}

void sol() {
    int n; cin >> n;
    for (int i = 1; i <= n-1; i++) {
        int a, b; cin >> a >> b;
        g[a].pb(b);
        g[b].pb(a);
    }

    dfs2(1, 0);

    int m; cin >> m;
    for (int i = 1; i <= m; i++) {
        int a, b, c; cin >> a >> b >> c;
        int l = lca(a, b);
        assert(l >= 0 && l < N);
        arr[l].pb({a, b, c});
    }

    dfs(1, 0);

    cout << max(dp[1][0], dp[1][1]) << endl;
}

int main () {
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);

    int t = 1;
    // cin >> t; 
    while (t--) {
        sol();
    }
    return 0;
}

Compilation message

election_campaign.cpp: In member function 'void fenTree::update(int, int)':
election_campaign.cpp:41:48: warning: statement has no effect [-Wunused-value]
   41 |     void update(int idx, int val) {idx++; for (idx; idx <= n; idx += (idx&-idx)) tree[idx] += val;}
      |                                                ^~~
election_campaign.cpp: In member function 'int fenTree::sum(int)':
election_campaign.cpp:42:48: warning: statement has no effect [-Wunused-value]
   42 |     int sum(int idx) {idx++; int ans = 0; for (idx; idx; idx -= (idx&-idx)) ans += tree[idx]; return ans;}
      |                                                ^~~
# Verdict Execution time Memory Grader output
1 Correct 3 ms 11100 KB Output is correct
2 Correct 3 ms 11100 KB Output is correct
3 Correct 2 ms 11100 KB Output is correct
4 Correct 3 ms 11196 KB Output is correct
5 Runtime error 72 ms 37468 KB Execution killed with signal 11
6 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 3 ms 11100 KB Output is correct
2 Correct 4 ms 11100 KB Output is correct
3 Correct 4 ms 11352 KB Output is correct
4 Correct 72 ms 28196 KB Output is correct
5 Correct 79 ms 28244 KB Output is correct
6 Correct 81 ms 28124 KB Output is correct
7 Correct 79 ms 28236 KB Output is correct
8 Correct 73 ms 28104 KB Output is correct
9 Correct 70 ms 28240 KB Output is correct
10 Correct 76 ms 28196 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 3 ms 11100 KB Output is correct
2 Correct 4 ms 11100 KB Output is correct
3 Correct 4 ms 11352 KB Output is correct
4 Correct 72 ms 28196 KB Output is correct
5 Correct 79 ms 28244 KB Output is correct
6 Correct 81 ms 28124 KB Output is correct
7 Correct 79 ms 28236 KB Output is correct
8 Correct 73 ms 28104 KB Output is correct
9 Correct 70 ms 28240 KB Output is correct
10 Correct 76 ms 28196 KB Output is correct
11 Correct 9 ms 11612 KB Output is correct
12 Correct 83 ms 28276 KB Output is correct
13 Correct 91 ms 28160 KB Output is correct
14 Correct 77 ms 28232 KB Output is correct
15 Correct 79 ms 28188 KB Output is correct
16 Correct 82 ms 28516 KB Output is correct
17 Correct 92 ms 28156 KB Output is correct
18 Correct 75 ms 28240 KB Output is correct
19 Correct 69 ms 28108 KB Output is correct
20 Correct 75 ms 28244 KB Output is correct
# Verdict Execution time Memory Grader output
1 Runtime error 128 ms 40328 KB Execution killed with signal 11
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 3 ms 11100 KB Output is correct
2 Correct 3 ms 11100 KB Output is correct
3 Correct 2 ms 11100 KB Output is correct
4 Correct 3 ms 11196 KB Output is correct
5 Runtime error 72 ms 37468 KB Execution killed with signal 11
6 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 3 ms 11100 KB Output is correct
2 Correct 3 ms 11100 KB Output is correct
3 Correct 2 ms 11100 KB Output is correct
4 Correct 3 ms 11196 KB Output is correct
5 Runtime error 72 ms 37468 KB Execution killed with signal 11
6 Halted 0 ms 0 KB -