제출 #696613

#제출 시각아이디문제언어결과실행 시간메모리
696613bachhoangxuanAutobus (COCI22_autobus)C++17
30 / 70
1004 ms11816 KiB
// Judges with GCC >= 12 only needs Ofast // #pragma GCC optimize("O3,no-stack-protector,fast-math,unroll-loops,tree-vectorize") // MLE optimization // #pragma GCC optimize("conserve-stack") // Old judges // #pragma GCC target("sse4.2,popcnt,lzcnt,abm,mmx,fma,bmi,bmi2") // New judges. Test with assert(__builtin_cpu_supports("avx2")); // #pragma GCC target("avx2,popcnt,lzcnt,abm,bmi,bmi2,fma,tune=native") // Atcoder // #pragma GCC target("avx2,popcnt,lzcnt,abm,bmi,bmi2,fma") #include<bits/stdc++.h> using namespace std; mt19937_64 rng(chrono::steady_clock::now().time_since_epoch().count()); uniform_real_distribution<> pp(0.0,1.0); #define int long long #define ld long double #define pii pair<int,int> #define piii pair<int,pii> #define fi first #define se second const int inf=1e18; const int mod=998244353; const int mod2=1e9+7; const int maxn=105; const int maxq=1000005; const int maxl=20; const int maxa=1000005; int power(int a,int n){ int res=1; while(n){ if(n&1) res=res*a%mod; a=a*a%mod;n>>=1; } return res; } vector<pii> query[maxn],edge[maxn]; int n,m,k,q,dist[maxn][maxn],ans[maxq]; void dijisktra(int s){ for(int i=1;i<=n;i++){ for(int j=0;j<=k;j++) dist[i][j]=inf; } priority_queue<piii,vector<piii>,greater<piii>> pq; dist[s][0]=0;pq.push({0,{s,0}}); while(!pq.empty()){ int u=pq.top().se.fi,num=pq.top().se.se,d=pq.top().fi;pq.pop(); if(dist[u][num]!=d) continue; for(pii v:edge[u]){ if(d+v.second<dist[v.first][num+1]){ dist[v.first][num+1]=d+v.second; if(num+1<k) pq.push({d+v.second,{v.first,num+1}}); } } } for(pii v:query[s]){ int Min=inf; for(int j=0;j<=k;j++) Min=min(Min,dist[v.first][j]); ans[v.second]=(Min==inf?-1:Min); } } void solve(){ cin >> n >> m; for(int i=1;i<=m;i++){ int u,v,w;cin >> u >> v >> w; edge[u].push_back({v,w}); } cin >> k >> q;k=min(k,n-1); for(int i=1;i<=q;i++){ int u,v;cin >> u >> v; query[u].push_back({v,i}); } for(int i=1;i<=n;i++){ if(!query[i].empty()) dijisktra(i); } for(int i=1;i<=q;i++) cout << ans[i] << '\n'; } signed main(){ ios_base::sync_with_stdio(false); cin.tie(NULL);cout.tie(NULL); int test=1;//cin >> test; while(test--) solve(); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...