Submission #1102880

#TimeUsernameProblemLanguageResultExecution timeMemory
1102880haianhnguyen08102007Hotspot (NOI17_hotspot)C++17
100 / 100
553 ms1312 KiB
#include <bits/stdc++.h>
using namespace std;
 
#define ll long long
#define ar array
 
const int mxN=5000, INF=1e9;
int n, m, k;
double dp[mxN];
ar<int, 2> d1[mxN], d2[mxN];
vector<int> adj[mxN];
 
void bfs(int s, ar<int, 2>* d) {
	memset(d, -1, 8*n);
	d[s]={0, 1};
	for (queue<int> q({s}); q.size(); q.pop()) {
		int u=q.front();
		for (int v : adj[u]) {
			if (d[v][0]==-1) {
				d[v]={d[u][0]+1, d[u][1]};
				q.push(v);
			} else if (d[u][0]+1==d[v][0]) d[v][1]+=d[u][1];
		}
	}
}
 
int main() {
	ios::sync_with_stdio(0);
	cin.tie(0);
	cin >> n >> m;
	for (int i=0; i<m; ++i) {
		int u, v;
		cin >> u >> v;
		adj[u].push_back(v);
		adj[v].push_back(u);
	}
	cin >> k;
	while(k--) {
		int u, v;
		cin >> u >> v;
		bfs(u, d1);
		bfs(v, d2);
		double t=d1[v][1];
		for (int j=0; j<n; ++j) if (d1[j][0]+d2[j][0]==d1[v][0]) dp[j]+=d1[j][1]*d2[j][1]/t;
	}
	cout << max_element(dp, dp+n)-dp;
	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...