Submission #473025

# Submission time Handle Problem Language Result Execution time Memory
473025 2021-09-14T18:24:11 Z ljuba Factories (JOI14_factories) C++17
15 / 100
2343 ms 524292 KB
#include "factories.h"
#include <bits/stdc++.h>

using namespace std;

const int mxN = 5e5 + 12;

typedef long long ll;

vector<pair<int, ll>> adj[mxN];
bool vis[mxN];
int sub[mxN];

//plasim se da ce biti sporo :/

int dfsSize(int s, int p = -1) {
    sub[s] = 1;
    for(auto b : adj[s]) {
        int e = b.first;
        if(e == p || vis[e])
            continue;
        dfsSize(e, s);
        sub[s] += sub[e];
    }
    return sub[s];
}

int centroid(int s, int p, int n) {
    for(auto b : adj[s]) {
        int e = b.first;
        if(e == p || vis[e])
            continue;

        if(sub[e] > n/2)
            return centroid(e, s, n);
    }

    return s;
}

unordered_map<int, ll> dist[mxN];

void dfs(int s, int p, int c) {
    ll vrednost = -1;
    for(auto b : adj[s]) {
        int e = b.first;
        if(e == p) {
            vrednost = b.second;
            break;
        }
    }
    if(vrednost == -1) {
        dist[c][s] = 0;
    } else {
        dist[c][s] = dist[c][p] + vrednost;
    }
    for(auto b : adj[s]) {
        int e = b.first;
        if(e == p || vis[e])
            continue;
        dfs(e, s, c);
    }
}

int iznad[mxN];

void build(int s, int p = -1) {
    int n = dfsSize(s);
    int c = centroid(s, -1, n);

    int vel = 31 - __builtin_clz(n);
    dist[c].reserve(1<<vel);
    dist[c].max_load_factor(0.25);

    dfs(c, -1, c);
    iznad[c] = p;
    vis[c] = true;

    for(auto b : adj[c]) {
        int e = b.first;
        if(vis[e])
            continue;
        build(e, c);
    }
}

ll mini[mxN];

void Init(int N, int A[], int B[], int D[]) {
    for(int i = 0; i < N-1; ++i) {
        int u = A[i], v = B[i];
        ll w = D[i];
        adj[u].push_back({v, w});
        adj[v].push_back({u, w});
    }

    build(0);

    //for(int i = 0; i < N; ++i) {
        //vector<pair<int, ll>> temp;
        //for(auto z : dist[i]) {
            //temp.push_back(z);
        //}
        //cout << i << ":";
        //for(auto z : temp)
            //cout << " {" << z.first << ", " << z.second << "}";
        //cout << endl;
    //}

    for(int i = 0; i < N; ++i)
        mini[i] = LLONG_MAX;
}

long long Query(int S, int X[], int T, int Y[]) {
    //drzi za prve, za druge samo proveri
    ll ans = LLONG_MAX;
    for(int i = 0; i < S; ++i) {
        int trenutni = X[i];
        int iteriraj = trenutni;
        while(iteriraj != -1) {
            mini[iteriraj] = min(mini[iteriraj], dist[iteriraj][trenutni]);
            iteriraj = iznad[iteriraj];
        }
    }

    for(int i = 0; i < T; ++i) {
        int trenutni = Y[i];
        int iteriraj = trenutni;
        while(iteriraj != -1) {
            if(mini[iteriraj] != LLONG_MAX) {
                ans = min(ans, mini[iteriraj] + dist[iteriraj][trenutni]);
            }
            iteriraj = iznad[iteriraj];
        }
    }

    for(int i = 0; i < S; ++i) {
        int iteriraj = X[i];
        while(iteriraj != -1) {
            mini[iteriraj] = LLONG_MAX;
            iteriraj = iznad[iteriraj];
        }
    }

    return ans;
}
# Verdict Execution time Memory Grader output
1 Correct 36 ms 40012 KB Output is correct
2 Correct 665 ms 51768 KB Output is correct
3 Correct 892 ms 52972 KB Output is correct
4 Correct 712 ms 52848 KB Output is correct
5 Correct 1083 ms 54048 KB Output is correct
6 Correct 332 ms 50252 KB Output is correct
7 Correct 836 ms 52664 KB Output is correct
8 Correct 879 ms 53228 KB Output is correct
9 Correct 1027 ms 54044 KB Output is correct
10 Correct 335 ms 50296 KB Output is correct
11 Correct 880 ms 52724 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 27 ms 39884 KB Output is correct
2 Runtime error 2343 ms 524292 KB Execution killed with signal 9
3 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 36 ms 40012 KB Output is correct
2 Correct 665 ms 51768 KB Output is correct
3 Correct 892 ms 52972 KB Output is correct
4 Correct 712 ms 52848 KB Output is correct
5 Correct 1083 ms 54048 KB Output is correct
6 Correct 332 ms 50252 KB Output is correct
7 Correct 836 ms 52664 KB Output is correct
8 Correct 879 ms 53228 KB Output is correct
9 Correct 1027 ms 54044 KB Output is correct
10 Correct 335 ms 50296 KB Output is correct
11 Correct 880 ms 52724 KB Output is correct
12 Correct 27 ms 39884 KB Output is correct
13 Runtime error 2343 ms 524292 KB Execution killed with signal 9
14 Halted 0 ms 0 KB -