Submission #404001

# Submission time Handle Problem Language Result Execution time Memory
404001 2021-05-13T16:38:42 Z CSQ31 Toll (BOI17_toll) C++14
15 / 100
192 ms 41544 KB
#pragma GCC optimize("Ofast") 
#include<bits/stdc++.h>
using namespace std;
#define pb push_back
#define fi first
#define se second
#define sz(a) (int)(a.size())
#define all(a) a.begin(),a.end()
#define lb lower_bound
#define ub upper_bound
#define owo ios_base::sync_with_stdio(0);cin.tie(0);
#define INF (ll)(1e18)
#define debug(...) fprintf(stderr, __VA_ARGS__),fflush(stderr)
#define time__(d) for(long blockTime = 0; (blockTime == 0 ? (blockTime=clock()) != 0 : false);\
debug("%s time : %.4fs\n", d, (double)(clock() - blockTime) / CLOCKS_PER_SEC))
typedef long long int ll;
typedef long double ld;
typedef pair<ll,ll> PII;
typedef pair<int,int> pii;
typedef vector<vector<int>> vii;
typedef vector<vector<ll>> VII;
ll gcd(ll a,ll b){if(!b)return a;else return gcd(b,a%b);}
const int MAXN = 2e5;
vector<vector<PII>>adj(MAXN),tadj(MAXN);
vector<int>l(MAXN),r(MAXN);
vector<ll>ans(MAXN,INF);
vii node(100000);
VII lf(5,vector<ll>(100000,INF)),rg(5,vector<ll>(100000,INF));
int n,k,m,o;
void re(int L,int R,vector<int>v){
	if(L == R){
		for(int x:v)ans[x] = l[x]==r[x]?0:-1;
		return;
	}
	int m = (L+R)/2;//compute rg
	for(int i=0;i<k;i++){
		lf[i][node[m][i]] = 0;
		rg[i][node[m][i]] = 0;
		for(PII x:adj[node[m][i]])rg[i][x.fi] = min(rg[i][x.fi],x.se);
		for(int j=m+1;j<R;j++){
			for(int v:node[j]){	
				for(PII x:adj[v]){
					rg[i][x.fi] = min(rg[i][x.fi],rg[i][v]+x.se);
				}
			}
		}
		for(PII x:tadj[node[m][i]])lf[i][x.fi] = min(lf[i][x.fi],x.se);
		for(int j=m-1;j>L;j--){
			for(int v:node[j]){	
				for(PII x:tadj[v]){
					lf[i][x.fi] = min(lf[i][x.fi],lf[i][v]+x.se);
				}
			}
		}		
	}
	vector<int>v0,v1;
	for(int x:v){
		if(l[x]/k <=m && r[x]/k>m){
			for(int i=0;i<k;i++)ans[x] = min(ans[x],lf[i][l[x]] + rg[i][r[x]]);
		}else if(l[x]/k > m)v1.pb(x);
		else if(r[x]/k <= m)v0.pb(x);
		
	}
	for(int i=0;i<k;i++){
		for(int j=L*k;j<(R+1)*k;j++)rg[i][j] = lf[i][j] = INF;
	}
	re(L,m,v0);
	re(m+1,R,v1);
}
int main()
{
	owo
	cin>>k>>n>>m>>o;
	for(int i=0;i<n;i++)node[i/k].pb(i);
	for(int i=0;i<m;i++){
		int a,b,c;
		cin>>a>>b>>c;
		adj[a].pb({b,c});
		tadj[b].pb({a,c});
	}
	for(int i=0;i<o;i++)cin>>l[i]>>r[i];
	vector<int>v;
	for(int i=0;i<n;i++)v.pb(i);
	re(0,(n-1)/k,v);
	for(int i=0;i<o;i++){
		if(ans[i] == INF)ans[i] = -1;
		cout<<ans[i]<<'\n';
	}
	
	
}
# Verdict Execution time Memory Grader output
1 Correct 85 ms 34848 KB Output is correct
2 Correct 12 ms 23744 KB Output is correct
3 Correct 12 ms 23760 KB Output is correct
4 Correct 12 ms 23684 KB Output is correct
5 Correct 13 ms 23740 KB Output is correct
6 Correct 14 ms 23740 KB Output is correct
7 Correct 15 ms 23740 KB Output is correct
8 Correct 88 ms 34952 KB Output is correct
9 Correct 70 ms 34740 KB Output is correct
10 Correct 34 ms 31028 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 116 ms 36356 KB Output is correct
2 Correct 12 ms 23740 KB Output is correct
3 Correct 13 ms 23808 KB Output is correct
4 Correct 12 ms 23748 KB Output is correct
5 Correct 13 ms 23772 KB Output is correct
6 Correct 12 ms 23740 KB Output is correct
7 Incorrect 15 ms 23836 KB Output isn't correct
8 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 12 ms 23808 KB Output is correct
2 Correct 14 ms 23812 KB Output is correct
3 Correct 12 ms 23740 KB Output is correct
4 Correct 14 ms 23740 KB Output is correct
5 Correct 13 ms 23740 KB Output is correct
6 Correct 13 ms 23740 KB Output is correct
7 Correct 14 ms 23740 KB Output is correct
8 Correct 16 ms 23868 KB Output is correct
9 Correct 15 ms 23796 KB Output is correct
10 Correct 89 ms 35640 KB Output is correct
11 Correct 161 ms 37040 KB Output is correct
12 Correct 175 ms 40188 KB Output is correct
13 Correct 192 ms 41544 KB Output is correct
14 Correct 156 ms 38548 KB Output is correct
15 Correct 108 ms 31996 KB Output is correct
16 Correct 109 ms 32004 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 12 ms 23808 KB Output is correct
2 Correct 14 ms 23812 KB Output is correct
3 Correct 12 ms 23740 KB Output is correct
4 Correct 14 ms 23740 KB Output is correct
5 Correct 13 ms 23740 KB Output is correct
6 Correct 13 ms 23740 KB Output is correct
7 Correct 14 ms 23740 KB Output is correct
8 Correct 16 ms 23868 KB Output is correct
9 Correct 15 ms 23796 KB Output is correct
10 Correct 89 ms 35640 KB Output is correct
11 Correct 161 ms 37040 KB Output is correct
12 Correct 175 ms 40188 KB Output is correct
13 Correct 192 ms 41544 KB Output is correct
14 Correct 156 ms 38548 KB Output is correct
15 Correct 108 ms 31996 KB Output is correct
16 Correct 109 ms 32004 KB Output is correct
17 Correct 121 ms 36744 KB Output is correct
18 Correct 14 ms 23728 KB Output is correct
19 Correct 13 ms 23788 KB Output is correct
20 Correct 12 ms 23804 KB Output is correct
21 Correct 12 ms 23804 KB Output is correct
22 Correct 12 ms 23676 KB Output is correct
23 Incorrect 14 ms 23792 KB Output isn't correct
24 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 85 ms 34848 KB Output is correct
2 Correct 12 ms 23744 KB Output is correct
3 Correct 12 ms 23760 KB Output is correct
4 Correct 12 ms 23684 KB Output is correct
5 Correct 13 ms 23740 KB Output is correct
6 Correct 14 ms 23740 KB Output is correct
7 Correct 15 ms 23740 KB Output is correct
8 Correct 88 ms 34952 KB Output is correct
9 Correct 70 ms 34740 KB Output is correct
10 Correct 34 ms 31028 KB Output is correct
11 Correct 116 ms 36356 KB Output is correct
12 Correct 12 ms 23740 KB Output is correct
13 Correct 13 ms 23808 KB Output is correct
14 Correct 12 ms 23748 KB Output is correct
15 Correct 13 ms 23772 KB Output is correct
16 Correct 12 ms 23740 KB Output is correct
17 Incorrect 15 ms 23836 KB Output isn't correct
18 Halted 0 ms 0 KB -