Submission #1194111

#TimeUsernameProblemLanguageResultExecution timeMemory
1194111_rain_Hotspot (NOI17_hotspot)C++20
100 / 100
911 ms216036 KiB
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;

const int N=(int)5000;
const int M=40000;
vector<int>ke[N+2];
LL d[N+2][N+2]={};
int dd[N+2][N+2]={},u[M+2],v[M+2],a[M+2],b[M+2];
int n,m,k;

void djisktra(int source){
	queue<int>q;
	for(int i=1;i<=n;++i) dd[source][i]=-1;
	dd[source][source]=0;
	d[source][source]=1;
	q.push(source);
	while (q.size()){
		int u=q.front(); q.pop();
		for(auto&v:ke[u]){
			if (dd[source][v]==-1){
				d[source][v]=d[source][u];
				dd[source][v]=dd[source][u]+1;
				q.push(v);
			}
			else if (dd[source][v]==dd[source][u]+1) d[source][v]+=d[source][u];
		}
	}
	return;
}

void add_canh(int u,int v){
	ke[u].push_back(v),
	ke[v].push_back(u);
	return;
}

int main(){
	ios::sync_with_stdio(false);
	cin.tie(0) ; cout.tie(0);
//	freopen("main.inp","r",stdin);
	
	cin>>n>>m;
	for(int i=1;i<=m;++i){
		cin>>u[i]>>v[i];
		++u[i],++v[i];
		add_canh(u[i],v[i]);
	}
	for(int i=1;i<=n;++i) djisktra(i);
	cin>>k;
	for(int i=1;i<=k;++i) {
		cin>>a[i]>>b[i];
		++a[i],++b[i];
	}
	double cur=0;
	int ans=-1;
	for(int i=1;i<=n;++i){
		double x=0;
		for(int j=1;j<=k;++j){
			int s2=d[a[j]][b[j]];
			int s1=0;
			if (dd[a[j]][i]+dd[b[j]][i]==dd[a[j]][b[j]]) s1=d[a[j]][i]*d[b[j]][i];
			if (s2!=0) x+=(double)s1/s2;
		}
		if (cur<x){
			cur=x;
			ans=i;
		}
	}
	cout<<ans-1;
}
#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...