# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
245147 | m3r8 | Toll (BOI17_toll) | C++14 | 3081 ms | 34920 KiB |
This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <stdio.h>
#define N 100100
int bst[N][17][5];
int nm[N][17][5];
int adj[N][5];
int k,n;
int solve(int st, int en){
int mx = -1;
if(st == en)return 0;
if(st/k == en/k)return -1;
for(int i = 15;i>=0;i--){
if(nm[st][i][0]/k <= en/k){
for(int j = 0;j<k;j++){
int tmp = solve(nm[st][i][j],en);
if(tmp != -1){
if(bst[st][i][j] != -1){
if(mx == -1 || mx > bst[st][i][j] + tmp){
mx = bst[st][i][j] + tmp;
};
};
};
};
break;
};
};
return mx;
};
int calc(int st, int p, int jk){
if(st > n){
return -1;
};
if(bst[st][p][jk])return bst[st][p][jk];
if(p == 0){
if(adj[st][jk])bst[st][p][jk] = adj[st][jk];
else bst[st][p][jk] = -1;
nm[st][p][jk] = (st/k + 1)*k + jk;
return bst[st][p][jk];
}else{
int mx = -1;
for(int i = 0;i<k;i++){
int tmp1 = calc(st,p-1,i);
int tmp2;
tmp2 = calc(nm[st][p-1][i],p-1,jk);
if(tmp1 != -1){
if(tmp2 != -1){
if(mx == -1 || mx > tmp1 + tmp2){
mx = tmp1 + tmp2;
};
};
};
};
bst[st][p][jk] = mx;
nm[st][p][jk] = (st/k + (1 << p)) * k + jk;
return bst[st][p][jk];
};
};
int main(void){
int m,o;
scanf("%d %d %d %d",&k,&n,&m,&o);
int a,b,t;
for(int i = 0;i<m;i++){
scanf("%d %d %d",&a,&b,&t);
adj[a][b%k] = t;
};
for(int i = 0;i<16;i++){
for(int j = 0;j<k;j++){
for(int l = 0;l<n;l++){
int tmp = calc(l,i,j);
//printf("%d %d %d %d %d\n",l,j,i,tmp,nm[l][i][j]);
};
};
};
for(int i = 0;i<o;i++){
scanf("%d %d",&a,&b);
printf("%d\n",solve(a,b));
};
return 0;
};
Compilation message (stderr)
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |