Submission #891707

# Submission time Handle Problem Language Result Execution time Memory
891707 2023-12-23T17:09:09 Z ind1v Putovanje (COCI20_putovanje) C++11
110 / 110
85 ms 48212 KB
#include <bits/stdc++.h>

using namespace std;

#define int long long

const int N = 2e5 + 4;
const int LG = 20;

int par[N][LG];
int a[N], b[N], d[N], lz[N];
array<int, 2> c[N];
array<int, 2> up[N];
vector<array<int, 3>> adj[N];
int n, ans;

void dfs(int u, int v, int depth) {
  d[u] = depth;
  par[u][0] = v;
  for (int i = 0; i < (int)adj[u].size(); i++) {
    int s = adj[u][i][0];
    int c1 = adj[u][i][1], c2 = adj[u][i][2];
    if (s != v) {
      array<int, 2> nx;
      nx[0] = c1;
      nx[1] = c2;
      up[s] = nx;
      dfs(s, u, depth + 1);
    }
  }
}

void dfs2(int u, int v) {
  for (int i = 0; i < (int)adj[u].size(); i++) {
    int s = adj[u][i][0];
    if (s != v) {
      dfs2(s, u);
      lz[u] += lz[s];
    }
  }
}

int lca(int u, int v) {
  if (d[u] < d[v]) {
    swap(u, v);
  }
  int df = d[u] - d[v];
  for (int i = LG - 1; i >= 0; i--) {
    if (df >= (1 << i)) {
      df -= (1 << i);
      u = par[u][i];
    }
  }
  if (u == v) {
    return u;
  }
  for (int i = LG - 1; i >= 0; i--) {
    if (par[u][i] != par[v][i]) {
      u = par[u][i];
      v = par[v][i];
    }
  }
  return par[u][0];
}

int32_t main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  cin >> n;
  for (int i = 1; i <= n - 1; i++) {
    cin >> a[i] >> b[i] >> c[i][0] >> c[i][1];
    array<int, 3> nz;
    nz[0] = b[i];
    nz[1] = c[i][0];
    nz[2] = c[i][1];
    adj[a[i]].push_back(nz);
    array<int, 3> nx;
    nx[0] = a[i];
    nx[1] = c[i][0];
    nx[2] = c[i][1];
    adj[b[i]].push_back(nx);
  }
  dfs(1, -1, 0);
  for (int j = 1; j < LG; j++) {
    for (int i = 1; i <= n; i++) {
      if (par[i][j - 1] == -1) {
        par[i][j] = -1;
        continue;
      }
      par[i][j] = par[par[i][j - 1]][j - 1];
    }
  }
  for (int i = 2; i <= n; i++) {
    ++lz[i - 1];
    ++lz[i];
    lz[lca(i, i - 1)] -= 2;
  }
  dfs2(1, -1);
  ans = 0;
  for (int i = 1; i <= n; i++) {
    ans += min(lz[i] * up[i][0], up[i][1]);
  }
  cout << ans;
  return 0;
}
# Verdict Execution time Memory Grader output
1 Correct 3 ms 16988 KB Output is correct
2 Correct 4 ms 16988 KB Output is correct
3 Correct 4 ms 16984 KB Output is correct
4 Correct 4 ms 16984 KB Output is correct
5 Correct 4 ms 16988 KB Output is correct
6 Correct 3 ms 16988 KB Output is correct
7 Correct 3 ms 16996 KB Output is correct
8 Correct 3 ms 16988 KB Output is correct
9 Correct 3 ms 17052 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 64 ms 42852 KB Output is correct
2 Correct 69 ms 46160 KB Output is correct
3 Correct 74 ms 48212 KB Output is correct
4 Correct 85 ms 47188 KB Output is correct
5 Correct 3 ms 16988 KB Output is correct
6 Correct 64 ms 42580 KB Output is correct
7 Correct 41 ms 35924 KB Output is correct
8 Correct 67 ms 45056 KB Output is correct
9 Correct 53 ms 45140 KB Output is correct
10 Correct 51 ms 44884 KB Output is correct
11 Correct 58 ms 45884 KB Output is correct
12 Correct 58 ms 46156 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 3 ms 16988 KB Output is correct
2 Correct 4 ms 16988 KB Output is correct
3 Correct 4 ms 16984 KB Output is correct
4 Correct 4 ms 16984 KB Output is correct
5 Correct 4 ms 16988 KB Output is correct
6 Correct 3 ms 16988 KB Output is correct
7 Correct 3 ms 16996 KB Output is correct
8 Correct 3 ms 16988 KB Output is correct
9 Correct 3 ms 17052 KB Output is correct
10 Correct 64 ms 42852 KB Output is correct
11 Correct 69 ms 46160 KB Output is correct
12 Correct 74 ms 48212 KB Output is correct
13 Correct 85 ms 47188 KB Output is correct
14 Correct 3 ms 16988 KB Output is correct
15 Correct 64 ms 42580 KB Output is correct
16 Correct 41 ms 35924 KB Output is correct
17 Correct 67 ms 45056 KB Output is correct
18 Correct 53 ms 45140 KB Output is correct
19 Correct 51 ms 44884 KB Output is correct
20 Correct 58 ms 45884 KB Output is correct
21 Correct 58 ms 46156 KB Output is correct
22 Correct 68 ms 41812 KB Output is correct
23 Correct 63 ms 38764 KB Output is correct
24 Correct 69 ms 41556 KB Output is correct
25 Correct 3 ms 16988 KB Output is correct
26 Correct 28 ms 28592 KB Output is correct
27 Correct 55 ms 38552 KB Output is correct
28 Correct 45 ms 41556 KB Output is correct
29 Correct 57 ms 46148 KB Output is correct
30 Correct 60 ms 45652 KB Output is correct
31 Correct 3 ms 16984 KB Output is correct