Submission #217234

# Submission time Handle Problem Language Result Execution time Memory
217234 2020-03-29T09:35:01 Z NONAME Putovanje (COCI20_putovanje) C++17
110 / 110
164 ms 44540 KB
#include <bits/stdc++.h>
#include <time.h>
//#include <random>
//#ifndef _LOCAL
//#pragma GCC optimize("-O3")
//#pragma GCC optimize("Ofast")
//#pragma GCC optimize("unroll-loops")
//#endif
#define sz(x) int(x.size())
#define in(x) freopen(x, "r", stdin)
#define out(x) freopen(x, "w", stdout)
#define N 2 * 100500
#define oo ll(1e16)
#define pii pair <int, int>
#define pll pair <ll, ll>
#define ft first
#define sd second
#define pb push_back
#define ppb pop_back
#define el '\n'
#define elf endl
#define base ll(1e9 + 7)
#define re return
#define nins 4294967295
using namespace std;
typedef long long ll;
typedef long double ld;
const int LOG = 20;

//mt19937 rnd(0);

struct st {
    int v;
    ll c1, c2;

    st (int v, ll c1, ll c2) : v(v), c1(c1), c2(c2) {}
};

ll n, tin[N], tout[N], timer, up[N][30], f[N];
ll rs, val[N];
vector <st> g[N];

void dfs(int v, int pr = 0) {
    tin[v] = timer++;

    up[v][0] = pr;
    for (int i = 1; i <= LOG; i++)
        up[v][i] = up[up[v][i - 1]][i - 1];

    for (int i = 0; i < sz(g[v]); i++) {
        int nxt = g[v][i].v;

        if (nxt == pr)
            continue;

        dfs(nxt, v);
    }

    tout[v] = timer++;
}

bool is_anc(int v, int u) {
    return (tin[v] < tin[u]) && (tout[v] > tout[u]);
}

int lca(int v, int u) {
    if (is_anc(v, u))
        return v;

    if (is_anc(u, v))
        return u;

    for (int i = LOG; i >= 0; i--)
        if (!is_anc(up[v][i], u))
            v = up[v][i];

    return up[v][0];
}

void find_res(int v, int pr = 0) {
    val[v] = f[v];

    for (int i = 0; i < sz(g[v]); i++) {
        int nxt = g[v][i].v;

        if (nxt == pr)
            continue;

        find_res(nxt, v);

        rs += min(val[nxt] * g[v][i].c1, g[v][i].c2);

        val[v] += val[nxt];
    }
}

void solve() {
    cin >> n;
    for (int i = 0; i < n - 1; i++) {
        int u, v;
        ll c1, c2;

        cin >> v >> u >> c1 >> c2; v--; u--;

        g[v].pb(st(u, c1, c2));
        g[u].pb(st(v, c1, c2));
    }

    dfs(0);

    for (int i = 0; i < n - 1; i++)
        f[i]++, f[i + 1]++, f[lca(i, i + 1)] -= 2;

    find_res(0);

    cout << rs;
}

int main() {
    ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
    #ifdef _LOCAL
        in("input.txt");

        int t = 1;
//        cin >> t;
        for (int i = 1; i <= t; i++) {
            cout << "Test #" << i << elf;

            clock_t start_time = clock();

            solve();

            cerr.precision(4); cerr << fixed;
            cerr << elf;
            cerr << "Time :: " << ld(clock() - start_time) / CLOCKS_PER_SEC << elf;

            cout << elf;
        }
    #else
        int t = 1;
//        cin >> t;

        while (t--) {
            solve();
            cout << el;
        }
    #endif
}
# Verdict Execution time Memory Grader output
1 Correct 7 ms 5120 KB Output is correct
2 Correct 9 ms 5760 KB Output is correct
3 Correct 9 ms 5760 KB Output is correct
4 Correct 9 ms 5760 KB Output is correct
5 Correct 9 ms 5888 KB Output is correct
6 Correct 7 ms 5120 KB Output is correct
7 Correct 8 ms 5248 KB Output is correct
8 Correct 8 ms 5504 KB Output is correct
9 Correct 9 ms 5760 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 143 ms 38520 KB Output is correct
2 Correct 137 ms 39928 KB Output is correct
3 Correct 152 ms 43128 KB Output is correct
4 Correct 164 ms 43640 KB Output is correct
5 Correct 8 ms 5376 KB Output is correct
6 Correct 143 ms 37884 KB Output is correct
7 Correct 90 ms 28664 KB Output is correct
8 Correct 140 ms 38652 KB Output is correct
9 Correct 115 ms 40440 KB Output is correct
10 Correct 111 ms 39288 KB Output is correct
11 Correct 122 ms 42152 KB Output is correct
12 Correct 122 ms 42104 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 7 ms 5120 KB Output is correct
2 Correct 9 ms 5760 KB Output is correct
3 Correct 9 ms 5760 KB Output is correct
4 Correct 9 ms 5760 KB Output is correct
5 Correct 9 ms 5888 KB Output is correct
6 Correct 7 ms 5120 KB Output is correct
7 Correct 8 ms 5248 KB Output is correct
8 Correct 8 ms 5504 KB Output is correct
9 Correct 9 ms 5760 KB Output is correct
10 Correct 143 ms 38520 KB Output is correct
11 Correct 137 ms 39928 KB Output is correct
12 Correct 152 ms 43128 KB Output is correct
13 Correct 164 ms 43640 KB Output is correct
14 Correct 8 ms 5376 KB Output is correct
15 Correct 143 ms 37884 KB Output is correct
16 Correct 90 ms 28664 KB Output is correct
17 Correct 140 ms 38652 KB Output is correct
18 Correct 115 ms 40440 KB Output is correct
19 Correct 111 ms 39288 KB Output is correct
20 Correct 122 ms 42152 KB Output is correct
21 Correct 122 ms 42104 KB Output is correct
22 Correct 147 ms 39160 KB Output is correct
23 Correct 118 ms 35064 KB Output is correct
24 Correct 140 ms 38520 KB Output is correct
25 Correct 8 ms 5496 KB Output is correct
26 Correct 56 ms 20476 KB Output is correct
27 Correct 117 ms 33784 KB Output is correct
28 Correct 99 ms 37880 KB Output is correct
29 Correct 125 ms 44540 KB Output is correct
30 Correct 122 ms 43896 KB Output is correct
31 Correct 9 ms 5632 KB Output is correct