結果
問題 |
No.3263 違法な散歩道
|
ユーザー |
|
提出日時 | 2025-09-06 13:52:56 |
言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 204 ms / 2,000 ms |
コード長 | 1,617 bytes |
コンパイル時間 | 2,288 ms |
コンパイル使用メモリ | 215,480 KB |
実行使用メモリ | 19,576 KB |
最終ジャッジ日時 | 2025-09-06 13:53:08 |
合計ジャッジ時間 | 6,462 ms |
ジャッジサーバーID (参考情報) |
judge / judge3 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 28 |
ソースコード
#include <bits/stdc++.h> #include <atcoder/fenwicktree.hpp> #include <atcoder/segtree.hpp> #include <atcoder/modint.hpp> #include <atcoder/dsu.hpp> #include <atcoder/lazysegtree.hpp> using namespace atcoder; using namespace std; using ll = long long; using ull = unsigned long long; template <class T> using max_heap = priority_queue<T>; template <class T> using min_heap = priority_queue<T, vector<T>, greater<>>; ll ll_min = numeric_limits<ll>::min(); ll ll_max = numeric_limits<ll>::max(); ll ALPHABET_N = 26; using mint = modint998244353; #define rep(i, n) for (ll i = (ll)0; i < (ll)n; i++) #define rep_(i, k, n) for (ll i = (ll)k; i < (ll)n; i++) #define all(a) a.begin(), a.end() int main() { ios::sync_with_stdio(false); cin.tie(0); ll n, m; cin >> n >> m; vector<vector<ll>> g(n); rep(i, m) { ll a, b; cin >> a >> b; a--; b--; g[a].push_back(b); g[b].push_back(a); } ll k; cin >> k; set<ll> st; rep(i, k) { ll a; cin >> a; a--; st.insert(a); } vector<vector<ll>> min_cost(n, vector<ll>(5, ll_max)); min_cost[0][0] = 0; queue<tuple<ll, ll, ll>> que; que.push({0, 0, 0}); while (!que.empty()) { auto [v, c, cdist] = que.front(); que.pop(); for (auto nv : g[v]) { ll nc; if (st.count(nv)) { nc = c + 1; } else { nc = 0; } if (nc > 4) continue; ll ncdist = cdist + 1; if (min_cost[nv][nc] > ncdist) { min_cost[nv][nc] = ncdist; que.push({nv, nc, ncdist}); } } } ll ans = ll_max; rep(i, 5) { ans = min(ans, min_cost[n - 1][i]); } if (ans == ll_max) ans = -1; cout << ans << endl; return 0; }