제출 #1345278

#제출 시각아이디문제언어결과실행 시간메모리
1345278vuqar_bazarov1Alias (COCI21_alias)C++20
50 / 70
13 ms592 KiB
/*
* * author: attacker
* * created: 01.04.2026 17:07:48
*/
#include <bits/stdc++.h>

using namespace std;

#ifdef LOCAL
#include "algo/debug.h"
#else
#define debug(...) 1
#endif

mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());

#define bpc __builtin_popcount
#define size(v) (int)(v.size())

int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(nullptr);
  cout.tie(nullptr);
  int n, m;
  cin >> n >> m;
  map<string, int> id;
  int num = 0;
  vector<tuple<string, string, int>> a(m);
  for (int i = 0; i < m; i++) {
    string x, y;
    int z;
    cin >> x >> y >> z;
    a[i] = {x, y, z};
    if (!id.count(x)) {
      id[x] = num++;
    }
    if (!id.count(y)) {
      id[y] = num++;
    }
  }
  vector<vector<pair<int, int>>> g(n);
  for (auto& [x, y, z] : a) {
    g[id[x]].push_back({id[y], z});
  }
  int q;
  cin >> q;
  while (q--) {
    string a, b;
    cin >> a >> b;
    int s = id[a];
    int f = id[b];
    vector<int> mn(n, int(1e9));
    vector<bool> seen(n, false);
    priority_queue<pair<int, int>, vector<pair<int, int>>, greater<pair<int, int>>> q;
    mn[s] = 0;
    q.push({0, s});
    while (!q.empty()) {
      auto [total, u] = q.top();
      q.pop();
      if (seen[u]) continue;
      seen[u] = true;
      for (auto [i, w] : g[u]) {
        if (mn[u] + w < mn[i]) {
          mn[i] = mn[u] + w;
          q.push({mn[i], i});
        }
      }
    }
    if (mn[f] != int(1e9)) {
      cout << mn[f] << '\n';
    } else {
      cout << "Roger" << '\n';
    }
  }
  return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...