Submission #1340665

#TimeUsernameProblemLanguageResultExecution timeMemory
1340665kawhietHotspot (NOI17_hotspot)C++20
100 / 100
542 ms1412 KiB
#include <bits/stdc++.h>
using namespace std;

#define int long long

constexpr int N = 5001;

vector<vector<int>> g;
vector<int> x, y;
vector<int> waysA, waysB;

void bfs(int st, vector<int>& dist, vector<int>& ways) {
    fill(dist.begin(), dist.end(), -1);
    fill(ways.begin(), ways.end(), 0);
    queue<int> q;
    q.push(st);
    dist[st] = 0;
    ways[st] = 1;
    while (!q.empty()) {
        int u = q.front(); q.pop();
        for (auto v : g[u]) {
            if (dist[v] == -1) {
                dist[v] = dist[u] + 1;
                ways[v] = ways[u];
                q.push(v);
            } else if (dist[v] == dist[u] + 1) {
                ways[v] += ways[u];
            }
        }
    }
}

signed main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    int n, m;
    cin >> n >> m;
    g.resize(n);
    x.resize(n);
    y.resize(n);
    waysA.resize(n);
    waysB.resize(n);
    for (int i = 0; i < m; i++) {
        int u, v;
        cin >> u >> v;
        g[u].push_back(v);
        g[v].push_back(u);
    }
    vector<long double> ans(n, 0);
    int k;
    cin >> k;
    while (k--) {
        int a, b;
        cin >> a >> b;
        bfs(a, x, waysA);
        bfs(b, y, waysB);
        int D = x[b];
        int tot = waysA[b];
        for (int i = 0; i < n; i++) {
            if (x[i] + y[i] == D) {
                ans[i] += (long double)waysA[i] * waysB[i] / tot;
            }
        }
    }
    long double mx = -1;
    int res = 0;
    for (int i = 0; i < n; i++) {
        if (ans[i] > mx) {
            mx = ans[i];
            res = i;
        }
    }
    cout << res << '\n';
    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...