Submission #422482

# Submission time Handle Problem Language Result Execution time Memory
422482 2021-06-10T07:21:17 Z tengiz05 Factories (JOI14_factories) C++17
33 / 100
8000 ms 275216 KB
#include "factories.h"
#include <bits/stdc++.h>
using i64 = long long;
constexpr int N = 600000, K = 22, M = 2 * N + 1;
std::vector<std::pair<int, int>> e[N];
i64 st[K + 1][M];
int lg[M + 1], n, P[N], timer;
i64 D[N];
i64 pos[M];
int order[N], timeStamp;
int par[N];
int dpar[N];
void dfs(int u, int p, i64 d = 0){
    order[timeStamp++] = u;
    par[u] = p;
    P[u] = timer;
    pos[timer++] = d;
    D[u] = d;
    for (auto [v, w] : e[u]) {
        if (v != p) {
            dpar[v] = w;
            dfs(v, u, d + w);
            pos[timer++] = d;
        }
    }
}
inline i64 dist(int u, int v) {
    int L = P[u], R = P[v];
    if (L > R) std::swap(L, R);
    int j = lg[R - L + 1];
    return D[u] + D[v] - std::min(st[j][L], st[j][R - (1 << j) + 1]);
}
void Init(int n, int A[], int B[], int D[]) {
    lg[1] = 0;
    for (int i = 2; i <= M; i++)
        lg[i] = lg[i / 2] + 1;
    ::n = n;
    for (int i = 0; i < n - 1; i++) {
        e[A[i]].emplace_back(B[i], D[i]);
        e[B[i]].emplace_back(A[i], D[i]);
    }
    dfs(0, 0);
    for (int i = 0; i < M; i++)
        st[0][i] = 2 * pos[i];
    for (int j = 1; j <= K; j++)
        for (int i = 0; i + (1 << j) <= M; i++)
            st[j][i] = std::min(st[j-1][i], st[j - 1][i + (1 << (j - 1))]);
}
i64 dp[N];
i64 Query(int S, int X[], int T, int Y[]) {
    if (S + T <= 1650) {
        i64 ans = 1e16;
        for (int i = 0; i < S; i++) {
            for (int j = 0; j < T; j++) {
                ans = std::min(ans, dist(X[i], Y[j]));
            }
        }
        return ans;
    }
    memset(dp, 0x3f, sizeof dp);
    for (int i = 0; i < S; i++) {
        dp[X[i]] = 0;
    }
    for (int i = n - 1; i >= 0; i--) {
        int u = order[i];
        dp[par[u]] = std::min(dp[par[u]], dp[u] + dpar[u]);
    }
    for (int i = 0; i < n; i++) {
        int u = order[i];
        dp[u] = std::min(dp[u], dp[par[u]] + dpar[u]);
    }
    i64 ans =  1e16;
    for (int i = 0; i < T; i++) {
        ans = std::min(ans, dp[Y[i]]);
    }
    return ans;
}
# Verdict Execution time Memory Grader output
1 Correct 126 ms 200332 KB Output is correct
2 Correct 2147 ms 213116 KB Output is correct
3 Correct 2150 ms 208420 KB Output is correct
4 Correct 670 ms 213128 KB Output is correct
5 Correct 1960 ms 213408 KB Output is correct
6 Correct 2017 ms 213320 KB Output is correct
7 Correct 2090 ms 208560 KB Output is correct
8 Correct 652 ms 213188 KB Output is correct
9 Correct 1977 ms 213412 KB Output is correct
10 Correct 2139 ms 213136 KB Output is correct
11 Correct 2145 ms 208708 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 112 ms 200096 KB Output is correct
2 Correct 1046 ms 250976 KB Output is correct
3 Correct 1097 ms 252584 KB Output is correct
4 Correct 901 ms 251720 KB Output is correct
5 Correct 1119 ms 275216 KB Output is correct
6 Correct 1139 ms 254000 KB Output is correct
7 Correct 1082 ms 218548 KB Output is correct
8 Correct 832 ms 219312 KB Output is correct
9 Correct 717 ms 222144 KB Output is correct
10 Correct 893 ms 219796 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 126 ms 200332 KB Output is correct
2 Correct 2147 ms 213116 KB Output is correct
3 Correct 2150 ms 208420 KB Output is correct
4 Correct 670 ms 213128 KB Output is correct
5 Correct 1960 ms 213408 KB Output is correct
6 Correct 2017 ms 213320 KB Output is correct
7 Correct 2090 ms 208560 KB Output is correct
8 Correct 652 ms 213188 KB Output is correct
9 Correct 1977 ms 213412 KB Output is correct
10 Correct 2139 ms 213136 KB Output is correct
11 Correct 2145 ms 208708 KB Output is correct
12 Correct 112 ms 200096 KB Output is correct
13 Correct 1046 ms 250976 KB Output is correct
14 Correct 1097 ms 252584 KB Output is correct
15 Correct 901 ms 251720 KB Output is correct
16 Correct 1119 ms 275216 KB Output is correct
17 Correct 1139 ms 254000 KB Output is correct
18 Correct 1082 ms 218548 KB Output is correct
19 Correct 832 ms 219312 KB Output is correct
20 Correct 717 ms 222144 KB Output is correct
21 Correct 893 ms 219796 KB Output is correct
22 Correct 1912 ms 257260 KB Output is correct
23 Correct 1577 ms 259636 KB Output is correct
24 Correct 1788 ms 259380 KB Output is correct
25 Correct 1827 ms 262848 KB Output is correct
26 Execution timed out 8070 ms 259400 KB Time limit exceeded
27 Halted 0 ms 0 KB -