Submission #598773

# Submission time Handle Problem Language Result Execution time Memory
598773 2022-07-19T03:25:24 Z nguyen31hoang08minh2003 Putovanje (COCI20_putovanje) C++14
110 / 110
91 ms 35324 KB
/*
\     \/     /\     \/     /\     \/     /\     \/     /\     \/     /\     \/     /\     \/     /\     \/     /\     \/     /\     \/     /
 \    /\    /  \    /\    /  \    /\    /  \    /\    /  \    /\    /  \    /\    /  \    /\    /  \    /\    /  \    /\    /  \    /\    /
  \   \/   /    \   \/   /    \   \/   /    \   \/   /    \   \/   /    \   \/   /    \   \/   /    \   \/   /    \   \/   /    \   \/   /
   \  /\  /      \  /\  /      \  /\  /      \  /\  /      \  /\  /      \  /\  /      \  /\  /      \  /\  /      \  /\  /      \  /\  /
    \//\\/        \//\\/        \//\\/        \//\\/        \//\\/        \//\\/        \//\\/        \//\\/        \//\\/        \//\\/
    /\\//\        /\\//\        /\\//\        /\\//\        /\\//\        /\\//\        /\\//\        /\\//\        /\\//\        /\\//\
   /  \/  \      /  \/  \      /  \/  \      /  \/  \      /  \/  \      /  \/  \      /  \/  \      /  \/  \      /  \/  \      /  \/  \
  /   /\   \    /   /\   \    /   /\   \    /   /\   \    /   /\   \    /   /\   \    /   /\   \    /   /\   \    /   /\   \    /   /\   \
 /    \/    \  /    \/    \  /    \/    \  /    \/    \  /    \/    \  /    \/    \  /    \/    \  /    \/    \  /    \/    \  /    \/    \
/     /\     \/     /\     \/     /\     \/     /\     \/     /\     \/     /\     \/     /\     \/     /\     \/     /\     \/     /\     \
\     \/     /\     \/     /\     \/     /\     \/     /\     \/     /\     \/     /\     \/     /\     \/     /\     \/     /\     \/     /
 \    /\    /  \    /\    /  \    /\    /  \    /\    /  \    /\    /  \    /\    /  \    /\    /  \    /\    /  \    /\    /  \    /\    /
  \   \/   /    \   \/   /    \   \/   /    \   \/   /    \   \/   /    \   \/   /    \   \/   /    \   \/   /    \   \/   /    \   \/   /
   \  /\  /      \  /\  /      \  /\  /      \  /\  /      \  /\  /      \  /\  /      \  /\  /      \  /\  /      \  /\  /      \  /\  /
    \//\\/        \//\\/        \//\\/        \//\\/        \//\\/        \//\\/        \//\\/        \//\\/        \//\\/        \//\\/
    /\\//\        /\\//\        /\\//\        /\\//\        /\\//\        /\\//\        /\\//\        /\\//\        /\\//\        /\\//\
   /  \/  \      /  \/  \      /  \/  \      /  \/  \      /  \/  \      /  \/  \      /  \/  \      /  \/  \      /  \/  \      /  \/  \
  /   /\   \    /   /\   \    /   /\   \    /   /\   \    /   /\   \    /   /\   \    /   /\   \    /   /\   \    /   /\   \    /   /\   \
 /    \/    \  /    \/    \  /    \/    \  /    \/    \  /    \/    \  /    \/    \  /    \/    \  /    \/    \  /    \/    \  /    \/    \
/     /\     \/     /\     \/     /\     \/     /\     \/     /\     \/     /\     \/     /\     \/     /\     \/     /\     \/     /\     \
*/
#include <bits/stdc++.h>
#define fore(i, a, b) for (int i = (a), i##_last = (b); i < i##_last; ++i)
#define fort(i, a, b) for (int i = (a), i##_last = (b); i <= i##_last; ++i)
#define ford(i, a, b) for (int i = (a), i##_last = (b); i >= i##_last; --i)
#define fi first
#define se second
#define pb push_back
#define sz(x) ((int)(x).size())
#define all(x) (x).begin(), (x).end()
#define rall(x) (x).rbegin(), (x).rend()
using namespace std;
using ll = long long;
using ld = long double;

template<class A, class B> bool maxi(A &a, const B &b) {return (a < b) ? (a = b, true):false;};
template<class A, class B> bool mini(A &a, const B &b) {return (a > b) ? (a = b, true):false;};

typedef unsigned long long ull;
typedef pair<int, int> ii;
typedef vector<int> vi;
typedef vector<ii> vii;
typedef vector<vi> vvi;
typedef vector<vii> vvii;

const int maxN = 400005;

int n, t, a[maxN], b[maxN], c[maxN][2], p[maxN], g[maxN], f[maxN], spt[20][maxN], Log2[maxN];
vii adj[maxN];
ll res;

void input() {
    cin >> n;
    fore(i, 1, n) {
        cin >> a[i] >> b[i] >> c[i][0] >> c[i][1];
        adj[a[i]].emplace_back(i, b[i]);
        adj[b[i]].emplace_back(i, a[i]);
    }
}

void subtask1() {
    const int N = n + 5;
    ll res = 0;
    int parent[N], f[N], r[N];
    const function<void(int)> dfs = [&](const int u) {
        for (const auto &[id, v] : adj[u]) {
            if (v == parent[u])
                continue;
            parent[v] = u;
            r[v] = id;
            dfs(v);
        }
    };
    fore(e, 1, n)
        f[e] = 0;
    fore(i, 1, n) {
        fort(u, 1, n)
            parent[u] = -1;
        dfs(i);
        for (int u = i + 1; u != i; u = parent[u])
            ++f[r[u]];
    }
    fore(e, 1, n)
        res += min(1LL * f[e] * c[e][0], 1LL * c[e][1]);
    cout << res << '\n';
}

void dfs(int u) {
    g[u] = t;
    spt[0][t++] = u;
    for (const auto &[id, v] : adj[u]) {
        if (v == p[u])
            continue;
        p[v] = u;
        dfs(v);
        spt[0][t++] = u;
    }
}

int getMin(int x, int y) {
    return g[x] < g[y] ? x : y;
}

int lca(int l, int r) {
    l = g[l];
    r = g[r];
    if (l > r)
        swap(l, r);
    const int &j = Log2[r - l + 1];
    return getMin(spt[j][l], spt[j][r - (1 << j) + 1]);
}

void dfs1(int u) {
    for (const auto &[e, v] : adj[u]) {
        if (v == p[u])
            continue;
        dfs1(v);
        res += min(1LL * f[v] * c[e][0], 1LL * c[e][1]);
        f[u] += f[v];
    }
}

void subtask3() {
    dfs(1);
    Log2[1] = 0;
    fore(i, 2, t)
        Log2[i] = Log2[i >> 1] + 1;
    for (int j = 1; (1 << j) <= t; ++j)
        fore(i, 0, t - (1 << j) + 1)
            spt[j][i] = getMin(spt[j - 1][i], spt[j - 1][i + (1 << j - 1)]);
    for (int x = 1, y; x < n; ++x) {
        y = lca(x, x + 1);
        ++f[x];
        ++f[x + 1];
        f[y] -= 2;
    }
    dfs1(1);
    cout << res << '\n';
}

int main() {
    #ifdef LOCAL
        freopen("input.INP", "r", stdin);
    #endif // LOCAL
    cin.tie(0) -> sync_with_stdio(0);
    cout.tie(0);
    input();
//    if (n <= 7000)
//        subtask1();
//    else
        subtask3();
    return 0;
}

Compilation message

putovanje.cpp: In lambda function:
putovanje.cpp:67:26: warning: structured bindings only available with '-std=c++17' or '-std=gnu++17'
   67 |         for (const auto &[id, v] : adj[u]) {
      |                          ^
putovanje.cpp: In function 'void dfs(int)':
putovanje.cpp:92:22: warning: structured bindings only available with '-std=c++17' or '-std=gnu++17'
   92 |     for (const auto &[id, v] : adj[u]) {
      |                      ^
putovanje.cpp: In function 'void dfs1(int)':
putovanje.cpp:115:22: warning: structured bindings only available with '-std=c++17' or '-std=gnu++17'
  115 |     for (const auto &[e, v] : adj[u]) {
      |                      ^
putovanje.cpp: In function 'void subtask3()':
putovanje.cpp:131:70: warning: suggest parentheses around '-' inside '<<' [-Wparentheses]
  131 |             spt[j][i] = getMin(spt[j - 1][i], spt[j - 1][i + (1 << j - 1)]);
      |                                                                    ~~^~~
# Verdict Execution time Memory Grader output
1 Correct 5 ms 9684 KB Output is correct
2 Correct 6 ms 10068 KB Output is correct
3 Correct 6 ms 10068 KB Output is correct
4 Correct 6 ms 10068 KB Output is correct
5 Correct 6 ms 10068 KB Output is correct
6 Correct 6 ms 9832 KB Output is correct
7 Correct 6 ms 9812 KB Output is correct
8 Correct 6 ms 9940 KB Output is correct
9 Correct 6 ms 10068 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 70 ms 30424 KB Output is correct
2 Correct 65 ms 31576 KB Output is correct
3 Correct 78 ms 33744 KB Output is correct
4 Correct 77 ms 33888 KB Output is correct
5 Correct 5 ms 9940 KB Output is correct
6 Correct 81 ms 29832 KB Output is correct
7 Correct 61 ms 24188 KB Output is correct
8 Correct 64 ms 32408 KB Output is correct
9 Correct 53 ms 33612 KB Output is correct
10 Correct 58 ms 32960 KB Output is correct
11 Correct 56 ms 34936 KB Output is correct
12 Correct 65 ms 35324 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 5 ms 9684 KB Output is correct
2 Correct 6 ms 10068 KB Output is correct
3 Correct 6 ms 10068 KB Output is correct
4 Correct 6 ms 10068 KB Output is correct
5 Correct 6 ms 10068 KB Output is correct
6 Correct 6 ms 9832 KB Output is correct
7 Correct 6 ms 9812 KB Output is correct
8 Correct 6 ms 9940 KB Output is correct
9 Correct 6 ms 10068 KB Output is correct
10 Correct 70 ms 30424 KB Output is correct
11 Correct 65 ms 31576 KB Output is correct
12 Correct 78 ms 33744 KB Output is correct
13 Correct 77 ms 33888 KB Output is correct
14 Correct 5 ms 9940 KB Output is correct
15 Correct 81 ms 29832 KB Output is correct
16 Correct 61 ms 24188 KB Output is correct
17 Correct 64 ms 32408 KB Output is correct
18 Correct 53 ms 33612 KB Output is correct
19 Correct 58 ms 32960 KB Output is correct
20 Correct 56 ms 34936 KB Output is correct
21 Correct 65 ms 35324 KB Output is correct
22 Correct 85 ms 31504 KB Output is correct
23 Correct 72 ms 28796 KB Output is correct
24 Correct 78 ms 31008 KB Output is correct
25 Correct 6 ms 9996 KB Output is correct
26 Correct 33 ms 19076 KB Output is correct
27 Correct 91 ms 27924 KB Output is correct
28 Correct 46 ms 30664 KB Output is correct
29 Correct 58 ms 35128 KB Output is correct
30 Correct 56 ms 34708 KB Output is correct
31 Correct 6 ms 10068 KB Output is correct