Submission #949937

#TimeUsernameProblemLanguageResultExecution timeMemory
949937efishelHotspot (NOI17_hotspot)C++17
100 / 100
413 ms2644 KiB
#include <bits/stdc++.h> using namespace std; using ll = long long; using dou = double; using vll = vector <ll>; const ll MAXN = 5E3+16; vll adj[MAXN]; vll radj[MAXN]; int main () { cin.tie(nullptr) -> sync_with_stdio(false); ll n, m; cin >> n >> m; for (ll i = 0; i < m; i++) { ll u, v; cin >> u >> v; adj[u].push_back(v); adj[v].push_back(u); } ll k; cin >> k; vector <dou> vals(n, 0); for (ll i = 0; i < k; i++) { ll s, t; cin >> s >> t; for (ll j = 0; j < MAXN; j++) radj[j].clear(); vll dp1(n, 0); // ways to reach i from s (s -> i) vll dp2(n, 0); // ways to reach t from i (i -> t) vll dis(n, -16); {vector <bool> vis(n, false); queue <ll> q; dp1[s] = 1; q.push(s); dis[s] = 0; vis[s] = true; while (q.size()) { // count shortest paths ll u = q.front(); q.pop(); // cerr << u << '\n'; for (ll v : adj[u]) { if (vis[v] && dis[u]+1 != dis[v]) continue; // cerr << " " << v << '\n'; dp1[v] += dp1[u]; radj[v].push_back(u); if (vis[v]) continue; // cerr << " new\n"; q.push(v); dis[v] = dis[u]+1; vis[v] = true; } }} // // for (ll i : dp1) cerr << i << ' '; cerr << '\n'; {vector <bool> vis(n, false); // travel from t to s adding values queue <ll> q; q.push(t); assert(dp1[t] > 0); dp2[t] = 1; while (q.size()) { ll u = q.front(); q.pop(); // cerr << u << '\n'; vals[u] += dou(dp1[u] * dp2[u]) / dou(dp1[t] * dp2[t]); for (ll v : radj[u]) { if (dis[u]-1 != dis[v]) continue; // cerr << " " << v << '\n'; dp2[v] += dp2[u]; if (vis[v]) continue; // cerr << " new\n"; q.push(v); vis[v] = true; } }} // // for (ll i : dp2) cerr << i << ' '; cerr << '\n'; } // cerr << fixed << setprecision(6); // for (dou i : vals) cerr << i << ' '; // cerr << '\n'; cout << max_element(vals.begin(), vals.end()) - vals.begin() << '\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...