Submission #1018615

#TimeUsernameProblemLanguageResultExecution timeMemory
1018615vjudge1Autobus (COCI22_autobus)C++17
30 / 70
1012 ms4188 KiB
#include <bits/stdc++.h> #define fast cin.tie(0)->sync_with_stdio(0); #define int long long #define inf ((int)1e18) using namespace std; const int N = 71; vector <pair<int, int> > adj[N]; vector <vector<vector<int> > > ans(N); int32_t main(){ fast int n, m; cin >> n >> m; for(int i = 0; i < m; i++) { int a, b, w; cin >> a >> b >> w; adj[a].push_back({b, w}); } int K, Q; cin >> K >> Q; K = min(K, n - 1); auto dijkstra = [&](int st) { // cout << st << ":\n"; vector <vector<int> > dist(N, vector<int>(N, inf)); vector <vector<bool> > vis(N, vector<bool>(N)); dist[st][0] = 0; priority_queue <array<int, 3>, vector<array<int,3> >, greater<array<int, 3>> > pq; // {k, -v, node} pq.push({0, 0, st}); while(!pq.empty()) { auto [k, v, node] = pq.top(); pq.pop(); if(k > K or vis[node][k]) continue; // cout << node << " " << k << " " << v << "\n"; dist[node][k] = v; vis[node][k] = 1; for(auto [to, w]:adj[node]) { if(dist[to][k + 1] == inf) { pq.push({k + 1, v + w, to}); } } } ans[st] = dist; }; for(int i = 1; i <= n; i++) { adj[i].push_back({i, 0}); } for(int i = 1; i <= n; i++) { dijkstra(i); } while(Q--) { int a, b; cin >> a >> b; cout << (ans[a][b][K] == inf ? -1 : ans[a][b][K]) << "\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...