Submission #689975

#TimeUsernameProblemLanguageResultExecution timeMemory
689975EthanKim8683Toll (BOI17_toll)C++17
100 / 100
162 ms36104 KiB
#include<bits/stdc++.h>
using namespace std;
using I=int;
using B=bool;
const I N=50000;
const I K=5;
const I LOGN=16;
const I MAX=1e9;
vector<I>adjs[N];
pair<I,I>ancs[N][LOGN][K];
pair<I,I>tmps[2][K];
I main(){
  cin.tie(0)->sync_with_stdio(0);
  fill(&ancs[0][0][0],&ancs[0][0][0]+N*LOGN*K,pair<I,I>{MAX,-1});
  I k,n,m,o;cin>>k>>n>>m>>o;
  for(I i=0;i<m;i++){
    I a,b,t;cin>>a>>b>>t;
    ancs[a][0][b%k]={t,b};
  }
  for(I i=1;i<LOGN;i++)for(I j=0;j<n;j++){
    for(I x=0;x<k;x++){
      auto[d1,a]=ancs[j][i-1][x];
      if(a==-1)continue;
      for(I y=0;y<k;y++){
        auto[d2,b]=ancs[a][i-1][y];
        if(b==-1)continue;
        ancs[j][i][y]=min(ancs[j][i][y],{d1+d2,b});
      }
    }
  }
  while(o--){
    I a,b;cin>>a>>b;
    I cnt=b/k-a/k,t=0;
    fill_n(tmps[t],k,pair<I,I>{MAX,-1});
    tmps[t][a%k]={0,a};
    for(I i=0;i<LOGN;i++)if(cnt>>i&1){
      fill_n(tmps[!t],k,pair<I,I>{MAX,-1});
      for(I x=0;x<k;x++){
        auto[d1,a]=tmps[t][x];
        if(a==-1)continue;
        for(I y=0;y<k;y++){
          auto[d2,b]=ancs[a][i][y];
          if(b==-1)continue;
          tmps[!t][y]=min(tmps[!t][y],{d1+d2,b});
        }
      }
      t=!t;
    }
    auto[d,c]=tmps[t][b%k];
    printf("%i\n",c==-1?-1:d);
  }
}
#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...