제출 #1170922

#제출 시각아이디문제언어결과실행 시간메모리
1170922nguyenkhangninh99Hotspot (NOI17_hotspot)C++20
100 / 100
820 ms154624 KiB

#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 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...