Submission #172691

#TimeUsernameProblemLanguageResultExecution timeMemory
172691muhammad_hokimiyonEvacuation plan (IZhO18_plan)C++14
100 / 100
1055 ms60176 KiB
#include <bits/stdc++.h> //#pragma GCC optimize("Ofast") #define fi first #define se second #define ll long long using namespace std; const int N = 2e5 + 7; const int M = 23; const int mod = 998244353; int n,m,k,q; int a[N]; int p[N]; int d[N]; int ans[N]; bool used[N]; set < int > ss[N]; vector < pair < int , int > > v[N]; int get( int x ) { return (p[x] == x ? x : p[x] = get(p[x])); } void meg( int x , int y , int z ) { x = get(x); y = get(y); if( x == y )return; if( (int)ss[x].size() > (int)ss[y].size() )swap(x , y); auto it = ss[x].begin(); while( it != ss[x].end() ){ int xx = *it; if( ss[y].find(xx) != ss[y].end() ){ ans[xx] = z; ss[y].erase(xx); }else{ ss[y].insert(xx); } it++; } p[x] = y; } void solve1() { cin >> n >> m; for( int i = 1; i <= m; i++ ){ int x,y,z; cin >> x >> y >> z; v[x].push_back({y , z}); v[y].push_back({x , z}); } for( int i = 1; i <= n; i++ ){ p[i] = i; d[i] = 1e9; } set < pair < int , int > > s; cin >> k; for( int i = 1; i <= k; i++ ){ int x; cin >> x; d[x] = 0; s.insert({0 , x}); } while( !s.empty() ){ auto x = *s.begin(); s.erase(s.begin()); for( auto y : v[x.se] ){ if( y.se + d[x.se] < d[y.fi] ){ s.erase({d[y.fi] , y.fi}); d[y.fi] = y.se + d[x.se]; s.insert({d[y.fi] , y.fi}); } } } vector < pair < int , int > > f; for( int i = 1; i <= n; i++ ){ f.push_back({d[i] , i}); } sort( f.rbegin() , f.rend() ); cin >> q; for( int i = 1; i <= q; i++ ){ int x,y; cin >> x >> y; ss[x].insert(i); ss[y].insert(i); } for( int i = 0; i < (int)f.size(); i++ ){ used[f[i].se] = true; for( auto y : v[f[i].se] ){ if( used[y.fi] ){ meg(y.fi , f[i].se , f[i].fi); } } } for( int i = 1; i <= q; i++ ){ cout << ans[i] << "\n"; } } int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); //freopen( "input.txt" , "r" , stdin ); //freopen( "output.txt" , "w" , stdout ); int cghf = 1;//cin >> cghf; while( cghf-- ){ solve1(); } }
#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...