結果
問題 |
No.3263 違法な散歩道
|
ユーザー |
![]() |
提出日時 | 2025-09-06 13:41:06 |
言語 | C++23 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 135 ms / 2,000 ms |
コード長 | 1,303 bytes |
コンパイル時間 | 3,613 ms |
コンパイル使用メモリ | 288,188 KB |
実行使用メモリ | 11,264 KB |
最終ジャッジ日時 | 2025-09-06 13:41:17 |
合計ジャッジ時間 | 7,326 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge3 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 28 |
ソースコード
//#define _GLIBCXX_DEBUG #include <bits/stdc++.h> using namespace std; #define rep(i, n) for (ll i = 0; i < (ll)(n); i++) #define all(a) (a).begin(), (a).end() using ll = long long; const ll INF32 = 2e9; const ll INF64 = 4e18; void printYN(bool ok){ if(ok)cout << "Yes" << endl; else cout << "No" << endl; return; } int main() { int N, M; cin >> N >> M; vector<vector<int>> G(N); rep(i, M){ int u, v; cin >> u >> v; u--; v--; G[u].push_back(v); G[v].push_back(u); } vector<bool> IWAI(N); int K; cin >> K; rep(i, K){ int ai; cin >> ai; ai--; IWAI[ai] = true; } vector<vector<int>> dist(5, vector<int>(N, INF32)); dist[0][0] = 0; queue<pair<int, int>> q; q.push({0,0}); while(!q.empty()){ auto [i, j] = q.front(); q.pop(); for(auto p: G[j]){ int nxi; if(IWAI[p])nxi = i+1; else nxi = 0; if(nxi>=5)continue; if(dist[nxi][p]!=INF32)continue; dist[nxi][p] = dist[i][j] +1; q.push({nxi, p}); } } int ans = INF32; rep(i, 5)ans = min(ans, dist[i][N-1]); if(ans!=INF32)cout << ans << endl; else cout << -1 << endl; return 0; }