Submission #1283367

#TimeUsernameProblemLanguageResultExecution timeMemory
1283367Jawad_Akbar_JJEvacuation plan (IZhO18_plan)C++20
10 / 100
1335 ms589824 KiB
#include <iostream> #include <vector> #include <set> #include <algorithm> using namespace std; #define int long long const int N = 1<<17; vector<pair<int,int>> nei[N], E, Ew; set<int> vec[N]; int Min[N], Ans[N], Par[N], inf = 1e17; void dijkstra(int n, int k = 0){ for (int i=1;i<=n;i++) Min[i] = inf; set<pair<int,int>> st; cin>>k; for (int i=1, v;i<=k;i++) cin>>v, Min[v] = 0, st.insert({0, v}); while (st.size() > 0){ auto [mn, u] = *begin(st); st.erase(begin(st)); for (auto [i, w] : nei[u]){ if (mn + w < Min[i]){ st.erase({Min[i], i}); Min[i] = mn + w; st.insert({Min[i], i}); } } } } int root(int v){ return (Par[v] == 0 ? v : Par[v] = root(Par[v])); } signed main(){ ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); int n, m, k, q; cin>>n>>m; for (int i=1, a, b, l;i<=m;i++){ cin>>a>>b>>l; nei[a].push_back({b, l}); nei[b].push_back({a, l}); E.push_back({a, b}); } dijkstra(n); for (int i=0;i<m;i++) Ew.push_back({min(Min[E[i].second], Min[E[i].first]), i}); sort(rbegin(Ew), rend(Ew)); cin>>q; for (int i=1, s, t;i<=q;i++){ cin>>s>>t; vec[s].insert(i); vec[t].insert(i); } for (auto [w, id] : Ew){ int A = root(E[id].first), B = root(E[id].second); if (A == B) continue; if (vec[A].size() > vec[B].size()) swap(A, B); for (int i : vec[B]){ if (vec[A].find(i) != vec[A].end()) Ans[i] = w; else vec[A].insert(i); } Par[B] = A; } for (int i=1;i<=q;i++) cout<<Ans[i]<<' '; cout<<'\n'; }
#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...