Submission #776218

#TimeUsernameProblemLanguageResultExecution timeMemory
776218MasterTasterToll (BOI17_toll)C++14
100 / 100
1743 ms5036 KiB
#include <bits/stdc++.h>

#define ll long long
#define pii pair<int, int>
#define xx first
#define yy second
#define pb push_back
#define MAXN 50010

using namespace std;

int n, m, k, q;
//map<pair<pii, pii>, int> dp;
int w[MAXN][6], ress[MAXN];

/*int resi(int a, int b, int x, int y)
{
	if (dp[{{a, b}, {x, y}}]) return dp[{{a, b}, {x, y}}];
	if ((a+1)==b) return 1000000010;

	int mid=a+(b-a)/2;
	int ress=1000000010;
	for (int i=0; i<k; i++)
	{
		ress=min(ress, resi(a, mid, x, i)+resi(mid, b, i, y));
	}

	dp[{{a, b}, {x, y}}]=ress;
	return ress;
}*/

int main(){
	cin>>k>>n>>m>>q;

	for (int i=0; i<n; i++) for (int j=0; j<k; j++) w[i][j]=1000000010;
	for (int i=0; i<m; i++)
	{
		int u, v, t; cin>>u>>v>>t;
		w[u][v%k]=t;
	}

	while (q--)
	{
		int x, y; cin>>x>>y;

		for (int i=x; i<=y; i++) ress[i]=1000000010;
		ress[x]=0;

		for (int i=x; i<(y/k)*k; i++)
		{
			for (int j=0; j<k; j++)
			{
				ress[((i/k)+1)*k+j]=min(ress[((i/k)+1)*k+j], ress[i]+w[i][j]);
				//cout<<i<<" do "<<((i/k)+1)*k+j<<" kosta "<<ress[((i/k)+1)*k+j]<<endl;
			}
		}

		if (ress[y]>=1000000010) cout<<-1<<"\n";
		else cout<<ress[y]<<"\n";

	}

}
#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...