結果
問題 |
No.3263 違法な散歩道
|
ユーザー |
![]() |
提出日時 | 2025-09-12 11:58:01 |
言語 | C++23 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 389 ms / 2,000 ms |
コード長 | 1,205 bytes |
コンパイル時間 | 14,798 ms |
コンパイル使用メモリ | 270,376 KB |
実行使用メモリ | 39,796 KB |
最終ジャッジ日時 | 2025-09-12 11:58:28 |
合計ジャッジ時間 | 16,255 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 28 |
ソースコード
#include <bits/stdc++.h> using namespace std; #define rep(i, n) for (int i = 0; i < (n); ++i) using ll = long long; using ull = unsigned long long; int main() { cin.tie(nullptr)->sync_with_stdio(false); int n, m; cin >> n >> m; vector<pair<int, int>> edges(m); rep(i, m) { int u, v; cin >> u >> v; --u, --v; edges[i] = { u, v }; } int k; cin >> k; set<int> p; rep(i, k) { int x; cin >> x; --x; p.insert(x); } vector Graph(6 * n, vector<int>()); for (auto [u, v] : edges) { rep(x, 5) { int nu = u + n * x, nv = v + n * (p.contains(v) ? x + 1 : 0); Graph[nu].push_back(nv); } rep(x, 5) { int nv = v + n * x, nu = u + n * (p.contains(u) ? x + 1 : 0); Graph[nv].push_back(nu); } } constexpr int INF = 1e9; vector<int> dist(6 * n, INF); dist[0] = 0; queue<int> q; q.push(0); while (!q.empty()) { int u = q.front(); q.pop(); for (int v : Graph[u]) { if (dist[v] > dist[u] + 1) { dist[v] = dist[u] + 1; q.push(v); } } } int ans = INF; rep(x, 6) ans = min(ans, dist[(n - 1) + n * x]); if (ans == INF) ans = -1; cout << ans << '\n'; return 0; }