Submission #42498

#TimeUsernameProblemLanguageResultExecution timeMemory
42498MatheusLealVEvacuation plan (IZhO18_plan)C++14
41 / 100
4096 ms37852 KiB
#include <bits/stdc++.h> #define int long long #define N 100005 #define inf 2000000000000000000LL #define f first #define s second using namespace std; typedef long long ll; typedef pair<int, int> pii; int n, m, k, q, P[N], id[N], dist[N], rev[N], pai[N], peso[N]; vector<pii> grafo[N]; void dijkstra() { priority_queue<pii, vector<pii>, greater<pii> > pq; for(int i = 1; i <= n; i++) dist[i] = inf; for(int i = 1; i <= k; i++) dist[ P[i] ] = 0, pq.push({0, P[i]}); while(!pq.empty()) { int x = pq.top().s, d = pq.top().f; pq.pop(); if(d > dist[x]) continue; for(auto v: grafo[x]) { if(dist[v.f] > dist[x] + v.s) { dist[v.f] = dist[x] + v.s; pq.push({dist[v.f], v.f}); } } } vector<pii> v; for(int i = 1; i <= n; i++) v.push_back({dist[i], i}); sort(v.begin(), v.end()); for(int i = 0; i < v.size(); i++) id[ v[i].s ] = i + 1, rev[i + 1] = v[i].s; } int ok[N]; int Find(int x) { if(x == pai[x]) return x; return pai[x] = Find(pai[x]); } void join(int a, int b) { a = Find(a), b = Find(b); if(a == b) return; if(peso[a] > peso[b]) pai[b] = a; else if(peso[a] < peso[b]) pai[a] = b; else pai[a] = b, peso[b] ++; } int cor = 1; int32_t main() { ios::sync_with_stdio(false); cin.tie(0); cin>>n>>m; for(int i = 1, a, b, c; i <= m; i++) { cin>>a>>b>>c; grafo[a].push_back({b, c}); grafo[b].push_back({a, c}); } cin>>k; for(int i = 1; i <= k; i++) cin>>P[i]; dijkstra(); cin>>q; for(int t = 1, a, b; t <= q; t++) { cin>>a>>b; int ini = 1, fim = n, mid, best = -1; for(int x = 1; x <= n; x++) pai[x] = x, peso[x] = 0; for(int x = n; x >= 1; x--) { int xi = rev[x]; for(auto v: grafo[xi]) { if(id[v.f] > x) { join(v.f, xi); } } if(Find(a) == Find(b)) { cout<< dist[ xi ] <<"\n"; break; } } } }

Compilation message (stderr)

plan.cpp: In function 'void dijkstra()':
plan.cpp:48:19: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for(int i = 0; i < v.size(); i++) id[ v[i].s ] = i + 1, rev[i + 1] = v[i].s;
                 ~~^~~~~~~~~~
plan.cpp: In function 'int32_t main()':
plan.cpp:102:7: warning: unused variable 'ini' [-Wunused-variable]
   int ini = 1, fim = n, mid, best = -1;
       ^~~
plan.cpp:102:16: warning: unused variable 'fim' [-Wunused-variable]
   int ini = 1, fim = n, mid, best = -1;
                ^~~
plan.cpp:102:25: warning: unused variable 'mid' [-Wunused-variable]
   int ini = 1, fim = n, mid, best = -1;
                         ^~~
plan.cpp:102:30: warning: unused variable 'best' [-Wunused-variable]
   int ini = 1, fim = n, mid, best = -1;
                              ^~~~
#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...