제출 #483875

#제출 시각아이디문제언어결과실행 시간메모리
483875Sohsoh84Alias (COCI21_alias)C++17
70 / 70
19 ms480 KiB
#include <bits/stdc++.h> using namespace std; typedef long long ll; typedef pair<ll, ll> pll; #define all(x) (x).begin(),(x).end() #define X first #define Y second #define sep ' ' #define endl '\n' #define debug(x) cerr << #x << ": " << x << endl; const ll MAXN = 1e3 + 10; const ll INF = 1e16; const ll MOD = 1e9 + 7; // 998244353; ll dist[MAXN]; int n, m, ind = 0; vector<pll> adj[MAXN]; map<string, int> mp; inline int Vert(string s) { auto it = mp.find(s); if (it == mp.end()) { mp[s] = ind; ind++; return ind - 1; } return it -> Y; } inline void Dijkstra(int s) { memset(dist, 63, sizeof dist); priority_queue<pll, vector<pll>, greater<pll>> pq; dist[s] = 0; pq.push({0, s}); while (!pq.empty()) { ll d_v = pq.top().X, v = pq.top().Y; pq.pop(); if (d_v != dist[v]) continue; for (pll e : adj[v]) { ll u = e.X, d_u = d_v + e.Y; if (d_u < dist[u]) { dist[u] = d_u; pq.push({d_u, u}); } } } } int main() { ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0); cin >> n >> m; for (int i = 0; i < m; i++) { int w; string s, t; cin >> s >> t >> w; adj[Vert(s)].push_back({Vert(t), w}); } int q; cin >> q; while (q--) { string s, t; cin >> s >> t; int v = Vert(s), u = Vert(t); Dijkstra(v); if (dist[u] > INF) cout << "Roger" << endl; else cout << dist[u] << endl; } return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...