제출 #1328173

#제출 시각아이디문제언어결과실행 시간메모리
1328173uranhishigHotspot (NOI17_hotspot)C++20
100 / 100
503 ms1364 KiB
#include <bits/stdc++.h>
using namespace std;
#define int long long
#define all(a) (a).begin(),(a).end()
#define rep(i, n) for(int i = 0; i < (n); i++)
const int mod = 1000000007;

const int mxn = 5005;
vector<int> adj[mxn];
double s[mxn];
int dista[mxn];
int distb[mxn];
double waysa[mxn];
double waysb[mxn];
int n, m;


void bfsa(int x){
	for (int i = 0; i <= n; i++) {
		dista[i] = -1;
		waysa[i] = 0;
	}
	queue<int> q;
	dista[x] = 0;
	waysa[x] = 1;
	q.push(x);
	
	while(!q.empty()){
		int u = q.front();
		q.pop();
		for (int v: adj[u]) {
			if(dista[v] == -1) {
				dista[v] = dista[u] + 1;
				waysa[v] = waysa[u];
				q.push(v);
			}
			
			else if(dista[v] == dista[u] + 1) {
				waysa[v] += waysa[u];
			}
		}
	}
}


void bfsb(int x){
	for (int i = 0; i <= n; i++) {
		distb[i] = -1;
		waysb[i] = 0;
	}
	queue<int> q;
	distb[x] = 0;
	waysb[x] = 1;
	q.push(x);
	
	while(!q.empty()){
		int u = q.front();
		q.pop();
		for (int v: adj[u]) {
			if(distb[v] == -1) {
				distb[v] = distb[u] + 1;
				waysb[v] = waysb[u];
				q.push(v);
			}
			
			else if(distb[v] == distb[u] + 1) {
				waysb[v] += waysb[u];
			}
		}
	}
}


signed main(){
    cin >> n >> m;
    while(m--){
        int u, v;
        cin >> u >> v;
        adj[u].push_back(v);
        adj[v].push_back(u);
    }
    	
	for (int i = 0; i <= n; i++) {
		s[i] = 0.0;
	}
    int k;
    cin >> k;
    for (int i = 0; i < k; i++) {
    	int a, b;
    	cin >> a >> b;
    	bfsa(a);
    	bfsb(b);
    	for (int w = 0; w < n; w++) {
            if (dista[w] + distb[w] == dista[b]) {
                s[w] += ((waysa[w] * waysb[w])/waysa[b]);
            }
        }
    	
	}	
	int ans = 0;
	
	for (int i = 1; i < n; i++) {
		if(s[i] > s[ans]) ans = i;
	}
	cout << ans;
	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...