Submission #1330879

#TimeUsernameProblemLanguageResultExecution timeMemory
1330879edoHotspot (NOI17_hotspot)C++20
100 / 100
531 ms1064 KiB
#include <bits/stdc++.h>

using namespace std;
using ll = long long;

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    int n, m; cin >> n >> m;
    vector<vector<int>> g(n);
    for(int i = 0, u, v; i < m; i++) {
        cin >> u >> v;
        g[u].push_back(v); g[v].push_back(u);
    }

    auto bfs = [&](int st, vector<int> &d, vector<ll>& cnt) {
        queue<int> q; q.push(st);
        d.assign(n, -1); cnt.assign(n, 0);
        d[st] = 0;
        cnt[st] = 1;
        while(q.size()) {
            int u = q.front(); q.pop();
            for(int &v : g[u]) {
                if(d[v] == -1) {
                    d[v] = d[u] + 1;
                    cnt[v] = cnt[u];
                    q.push(v);
                }
                else if(d[v] == d[u] + 1) {
                    cnt[v] += cnt[u];
                }
            }
        }
    };

    int k;
    cin >> k;
    vector<double> score(n, 0.0);
    for(int i = 0, a, b; i < k; i++) {
        cin >> a >> b;
        vector<int> da, db;
        vector<ll> ca, cb;
        bfs(a, da, ca);
        bfs(b, db, cb);

        double tot = ca[b];
        for(int w = 0; w < n; w++) {
            if(da[w] + db[w] == da[b]) 
                score[w] += double(ca[w] * cb[w]) / tot;
        }
    }

    cout << ranges::max_element(score) - score.begin();
    return 0;
}

#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...
#Verdict Execution timeMemoryGrader output
Fetching results...