Submission #1284815

#TimeUsernameProblemLanguageResultExecution timeMemory
1284815kaysanToll (BOI17_toll)C++20
0 / 100
3113 ms491492 KiB
#include <bits/stdc++.h>
#define ll int
#define ld long double
#define pb push_back
#define pp pop_back
#define pf push_front
#define pt pop_front
#define fi first
#define se second
#define lb lower_bound
#define ub upper_bound
#define pll pair<ll,ll>
#define pii pair<int,int>
#define vl vector<ll>
#define endl "\n"
#define fr(i,a,b) for(ll i=a; i<=b; i++)
#define fre(i,a,b) for(ll i=a; i>=b; i--)
#define kpnyh ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
// __builtin_ctzll(bits) kalo mau iterasi bits 1 nya aja
const ll maxn = 50005, maxn2 = 1e7+7, modn2 = 1e9+7, modn = 998244353;
using namespace std;
ll mul(ll x, ll y) {return (x*y) % modn;}
ll add(ll x, ll y) {return(x+y) % modn;}
ll dec(ll x, ll y) {return(x-y+modn) % modn;}
ll binpow(ll x, ll y) {ll ret = 1;while (y) {if (y&1) ret = mul(ret,x); y/=2;x = mul(x,x);}return ret;}
mt19937_64 rng(chrono::steady_clock::now().time_since_epoch().count());

//inget kalo dapet ide tulis dulu langkah langkahnya biar ngga ada yang ke skip
//lu pernah debug sampe tengah malem buat ide yang udah bener cuman gegara ada yang ke skip
 
ll te,n,m,k,q;

priority_queue<pll, vector<pll>, greater<pll>>pq;
vector<vector<pll>>adj(maxn);
vector<vector<ll>>d;

void SP (ll start) {
    vector<ll>dist(n+2,1e18);
	dist[start] = 0;
	pq.push({0,start});
	
	while (!pq.empty()) {
		ll cost = pq.top().fi, node = pq.top().se; pq.pop();
		
		if (dist[node] < cost) continue;
		
		for (auto [next,weight] : adj[node]) {
			if (weight + cost < dist[next]) {
				dist[next] = weight + cost;
				pq.push({dist[next], next});
			} 
		}
	}	
    d.pb(dist);
}

void solve() {
	cin>>k>>n>>m>>q;
    for (ll i=1; i<=m; i++) {
        ll u,v,w; cin>>u>>v>>w;
        adj[u].pb({v,w});
    }
    map<ll,ll>mp;
    ll now = 0;
    while (q--) {
        ll u,v; cin>>u>>v;
        if (mp[u] == 0) {
            now++;
            mp[u] = now;
            SP(u);
        }
        if (d[mp[u]-1][v] == 1e18) cout<<-1<<endl;
        else cout<<d[mp[u] - 1][v]<<endl;
    }
}
 
/*\
1
5
6 6 6 6 6
*/
 
int main () {
	kpnyh
	te=1;
 //   freopen("input.txt", "r", stdin);
 //   freopen("output.txt", "w", stdout);	
 //   cin>>te;
    while (te--) {
    	//cout<<endl;
        solve();
    }
}

Compilation message (stderr)

toll.cpp: In function 'void SP(int)':
toll.cpp:38:24: warning: overflow in conversion from 'double' to 'std::vector<int>::value_type' {aka 'int'} changes value from '1.0e+18' to '2147483647' [-Woverflow]
   38 |     vector<ll>dist(n+2,1e18);
      |                        ^~~~
#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...