#include <bits/stdc++.h>
using namespace std;
const int maxn = 5e3 + 5;
int d[maxn][maxn], a[maxn], b[maxn];
int cnt[maxn][maxn];
double s[maxn];
vector<int> adj[maxn];
int n, m;
void dijk(int id){
queue<int> q;
for(int i = 1; i <= n; i++) d[id][i] = 1e9;
q.push(id);
d[id][id] = 0;
cnt[id][id] = 1;
while(q.size()){
int u = q.front();
q.pop();
for(int v: adj[u]){
if(d[id][v] > d[id][u] + 1){
cnt[id][v] = cnt[id][u];
d[id][v] = d[id][u] + 1;
q.push(v);
}
else if(d[id][v] == d[id][u] + 1) cnt[id][v] = cnt[id][v] + cnt[id][u];
}
}
}
void solve(){
cin >> n >> m;
for(int i = 1; i <= m; i++){
int u, v; cin >> u >> v;
u++;
v++;
adj[u].push_back(v);
adj[v].push_back(u);
}
for(int i = 1; i <= n; i++) dijk(i);
int k; cin >> k;
for(int i = 1; i <= k; i++){
cin >> a[i] >> b[i];
a[i]++; b[i]++;
}
double mx = -2e9, ans;
for(int i = 1; i <= n; i++){
s[i] = 0;
for(int j = 1; j <= k; j++){
if(d[a[j]][i] + d[i][b[j]] == d[a[j]][b[j]]){
double s1 = cnt[a[j]][i], s2 = cnt[i][b[j]], s3 = cnt[a[j]][b[j]];
s[i] = s[i] + (s1 * s2) / s3;
}
}
if(s[i] > mx){
mx = s[i];
ans = i;
}
}
cout << ans - 1;
}
signed main() {
ios_base::sync_with_stdio(false);
cin.tie(0); cout.tie(0);
solve();
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |