Submission #93665

#TimeUsernameProblemLanguageResultExecution timeMemory
93665MercenaryEvacuation plan (IZhO18_plan)C++11
100 / 100
821 ms38812 KiB
#include<bits/stdc++.h> using namespace std; #define taskname "TEST" #define pb push_back typedef long double ld; typedef long long ll; const int maxn = 1e5 + 5; typedef pair<int,int> tpair; #define mp make_pair int n , m , k , q , a[maxn]; vector<tpair> adj[maxn]; set<int>* s[maxn]; int res[maxn] , d[maxn]; void enter() { cin >> n >> m; for(int i = 1 ; i <= m ; ++i) { int u , v , w;cin >> u >> v >> w; adj[u].pb(mp(v,w)); adj[v].pb(mp(u,w)); } cin >> k; for(int i = 1 ; i <= k ; ++i)cin >> a[i]; } priority_queue<tpair,vector<tpair>,greater<tpair>> pq; void dij() { fill_n(d,maxn,(int)1e9); for(int i = 1 ; i <= k ; ++i) { d[a[i]] = 0; pq.push(mp(0,a[i])); } while(!pq.empty()) { auto u = pq.top();pq.pop(); if(d[u.second] != u.first)continue; for(auto c : adj[u.second]) { if(d[c.first] > u.first + c.second) { d[c.first] = u.first + c.second; pq.push(mp(d[c.first],c.first)); } } } } int lab[maxn]; int finds(int u) { return lab[u] < 0 ? u : lab[u] = finds(lab[u]); } void Uni(int now , int u , int v) { u = finds(u); v = finds(v); if(u == v)return; if(lab[u] > lab[v])swap(u,v); lab[u] += lab[v]; lab[v] = u; if(s[u]->size() < s[v]->size())swap(s[u],s[v]); for(auto c : (*s[v])){ if(s[u]->find(c) != s[u]->end())res[c] = min(res[c],now) , s[u]->erase(c); else s[u]->insert(c); } s[v]->clear(); } void solve() { cin >> q; for(int i = 1 ; i <= n ; ++i)s[i] = new set<int>; for(int i = 1 ; i <= q ; ++i) { int u , v;cin >> u >> v; if(d[u] == 0 || d[v] == 0) { res[i] = 0; continue; } // if(s[u] == NULL)s[u] = new set<int>; res[i] = min(d[u],d[v]); s[u]->insert(i); s[v]->insert(i); } fill_n(lab,maxn,-1); vector<tpair> v; for(int i = 1 ; i <= n ; ++i)v.pb(mp(d[i],i)); sort(v.begin(),v.end(),greater<tpair>()); for(auto u : v) { for(auto c : adj[u.second]) if(d[c.first] >= u.first)Uni(u.first,u.second,c.first); } for(int i = 1 ; i <= q ; ++i) cout << res[i] << '\n'; } int main() { ios_base::sync_with_stdio(0); cin.tie(0); if(fopen(taskname".INP","r")) freopen(taskname".INP", "r",stdin) , freopen(taskname".OUT", "w",stdout); enter(); dij(); solve(); }

Compilation message (stderr)

plan.cpp: In function 'int main()':
plan.cpp:111:44: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)', declared with attribute warn_unused_result [-Wunused-result]
         freopen(taskname".INP", "r",stdin) ,
         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~
         freopen(taskname".OUT", "w",stdout);
         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
plan.cpp:111:44: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)', declared with attribute warn_unused_result [-Wunused-result]
#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...