Submission #1045842

#TimeUsernameProblemLanguageResultExecution timeMemory
1045842vjudge1Evacuation plan (IZhO18_plan)C++17
0 / 100
110 ms19284 KiB
#include <bits/stdc++.h>
using namespace std;

const int N = 100011;
vector<int> qr[N];
vector<pair<int, int>> g[N];
long long d[N], p[N], res[N];
int cur = 0;

void dijkstra() {
    int k;
    cin >> k;
    fill(d + 1, d + N, LLONG_MAX);
    set<pair<long long, int>> st;

    for (int i = 0; i < k; i++) {
        int x;
        cin >> x;
        d[x] = 0;
        st.insert({0, x});
    }

    while (!st.empty()) {
        int v = st.begin()->second;
        st.erase(st.begin());

        for (auto [to, w] : g[v]) {
            if (d[to] > d[v] + w) {
                st.erase({d[to], to});
                d[to] = d[v] + w;
                st.insert({d[to], to});
            }
        }
    }
}

int get(int v) {
    if (p[v] == v) return v;
    return p[v] = get(p[v]);
}

void merge(int v, int u) {
    v = get(v);
    u = get(u);
    if (v == u) return;

    if (qr[v].size() < qr[u].size()) {
        swap(v, u);
    }

    for (int i : qr[u]) {
        if (find(qr[v].begin(), qr[v].end(), i) == qr[v].end()) {
            qr[v].push_back(i);
        } else {
            res[i] = cur;
            qr[v].erase(find(qr[v].begin(), qr[v].end(), i));
        }
    }
    qr[u].clear();
}

void process()
{
    int n, m;
    cin >> n >> m;

    for (int i = 1; i <= m; i++)
    {
        int x, y, w;
        cin >> x >> y >> w;
        g[x].emplace_back(y, w);
        g[y].emplace_back(x, w);
    }

    dijkstra();

    int q;
    cin >> q;
    for (int i = 1; i <= q; i++) {
        int s, t;
        cin >> s >> t;
        qr[s].push_back(i);
        qr[t].push_back(i);
    }

    vector<int> b(n);
    iota(b.begin(), b.end(), 1);
    sort(b.begin(), b.end(), [](int x, int y) {
        return d[x] > d[y];
    });

    iota(p + 1, p + n + 1, 1);

    for (int i : b)
    {
        cur = d[i];
        for (auto [to, w] : g[i])
        {
            if (d[to] >= d[i])
            {
                merge(i, to);
            }
        }
    }

    for (int i = 1; i <= q; i++)
    {
        cout << res[i] << '\n';
    }
}
main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    #define task "phcbaka"
    if (fopen(task ".inp", "r")) // Kiểm tra xem có đọc vào từ file không
    {
        freopen(task ".inp", "r", stdin);
        freopen(task ".out", "w", stdout);
    }
    process();
}

Compilation message (stderr)

plan.cpp:111:1: warning: ISO C++ forbids declaration of 'main' with no type [-Wreturn-type]
  111 | main()
      | ^~~~
plan.cpp: In function 'int main()':
plan.cpp:118:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
  118 |         freopen(task ".inp", "r", stdin);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~
plan.cpp:119:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
  119 |         freopen(task ".out", "w", stdout);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...