Submission #526936

#TimeUsernameProblemLanguageResultExecution timeMemory
526936oneloveforeverAutobus (COCI22_autobus)C++14
30 / 70
1088 ms508 KiB
#include<bits/stdc++.h> using namespace std; #define ll long long #define x first #define y second #define ii pair<ll,ll> const ll inf=1e16+7; vector<vector<ii> >a; ll n,m; struct node { ll x,used,value; node(ll _value=0,ll _x=0,ll _used=0) { x=_x,used=_used,value=_value; } }; bool minimize(ll &a,ll b) { if(a>b) { a=b; return true; } return false; } int main() { //freopen("test.inp","r",stdin); //freopen("test.out","w",stdout); ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0); cin>>n>>m; a.resize(n+7); for(ll i=1;i<=m;i++) { ll x,y,value; cin>>x>>y>>value; a[x].push_back({y,value}); } ll q,k; cin>>k>>q; vector<vector<ll> >dp(n+1,vector<ll>(min(k+1,n),inf)); while(q--) { ll node_x,node_y; cin>>node_x>>node_y; for(ll i=0;i<=min(k,n-1);i++) { for(ll node=1;node<=n;node++)dp[node][i]=inf; } dp[node_x][0]=0; queue<node>q; q.push({0,node_x,0}); while(!q.empty()) { ll value=q.front().value; ll x=q.front().x; ll used=q.front().used; q.pop(); if(used==min(k,n-1))continue; if(dp[x][used]!=value)continue; for(ii u:a[x]) { ll node=u.x; ll cost=u.y; if(minimize(dp[node][used+1],dp[x][used]+cost)) { q.push({dp[node][used+1],node,used+1}); } } } ll ans=inf; for(ll i=0;i<=min(k,n-1);i++)ans=min(ans,dp[node_y][i]); cout<<(ans==inf?-1:ans)<<endl;; } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...