Submission #293170

#TimeUsernameProblemLanguageResultExecution timeMemory
293170BertedHotspot (NOI17_hotspot)C++14
100 / 100
2043 ms1992 KiB
#include <iostream>
#include <queue>
#include <vector>
#define pii pair<int,int>
#define ppi pair<int,pii>
#define fst first
#define snd second
#define vi vector<int>
#define pub push_back
using namespace std;
vector<vi> adj;int n,m,k,a,b,cr[5001][2]={},dst[5001]={};bool bt[5001]={};
double lk[5001]={};
queue<ppi> q;
int main()
{
	ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
	cin>>n>>m;
	for (int i=0;i<n;i++) {adj.pub(vi());}
	for (int i=0;i<m;i++) {cin>>a>>b;adj[a].pub(b);adj[b].pub(a);}
	cin>>k;
	for (int i=0;i<k;i++)
	{
		cin>>a>>b;
		for (int j=0;j<n;j++) {dst[j] = -1;bt[j]=0;}
		q.push({a,{0,-1}});
		while (!q.empty())
		{
			ppi dt = q.front();q.pop();
			
			if (dst[dt.fst]==-1)
			{
				dst[dt.fst] = dt.snd.fst;
				cr[dt.fst][0] = ((dt.snd.snd==-1)?(1):cr[dt.snd.snd][0]);
				for (auto v:adj[dt.fst]) {q.push({v,{dt.snd.fst+1,dt.fst}});}
			}
			else if (dst[dt.fst]==dt.snd.fst) {cr[dt.fst][0]+=((dt.snd.snd==-1)?1:cr[dt.snd.snd][0]);}
			//
		}
		q.push({b,{dst[b],-1}});
		while (!q.empty())
		{
			ppi dt = q.front();q.pop();
			cr[dt.fst][1]+=((dt.snd.snd==-1)?1:cr[dt.snd.snd][1]);
			if (!bt[dt.fst])
			{
				bt[dt.fst] = 1;
				for (auto v:adj[dt.fst]) 
				{
					if (dst[v] == dt.snd.fst-1 && dst[v] >= 0) {q.push({v,{dt.snd.fst-1,dt.fst}});}
				}
			}
		}
		//cout<<cr[b][0]<<"\n";
		for (int i=0;i<n;i++)
		{
			//cout<<i<<" "<<cr[i][0]<<" "<<cr[i][1]<<" "<<dst[i]<<"\n";
			lk[i] += (double) cr[i][0] * cr[i][1] / cr[b][0];
		}
		for (int i=0;i<n;i++) {cr[i][0] = cr[i][1] = 0;}
	}
	int mx = 0;
	for (int i=1;i<n;i++)
	{
		if (lk[i]>lk[mx]) {mx = i;}
		//cout<<i<<" "<<lk[i]<<"\n";
	}
	cout<<mx<<"\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...