結果
問題 |
No.2565 はじめてのおつかい
|
ユーザー |
|
提出日時 | 2025-04-01 02:05:08 |
言語 | C++23 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 50 ms / 2,000 ms |
コード長 | 1,144 bytes |
コンパイル時間 | 3,403 ms |
コンパイル使用メモリ | 281,028 KB |
実行使用メモリ | 9,856 KB |
最終ジャッジ日時 | 2025-04-01 02:05:16 |
合計ジャッジ時間 | 6,872 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge3 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 50 |
ソースコード
#include <bits/stdc++.h> using namespace std; using ll = long long; #define rep(i, s, e) for (int i = (int)(s); i < (int)(e); ++i) #define all(a) (a).begin(),(a).end() int INF = 1 << 25; vector<int> bfs(int s, int N, vector<vector<int>> &G) { queue<int> que; vector<int> res(N, INF); que.push(s); res[s] = 0; while (!que.empty()) { int v = que.front(); que.pop(); for (int next : G[v]) { if (res[next] != INF) continue; res[next] = res[v] + 1; que.push(next); } } return res; } int main() { cin.tie(nullptr); ios_base::sync_with_stdio(false); int N, M; cin >> N >> M; vector<vector<int>> G(N); rep(i, 0, M) { int u, v; cin >> u >> v; G[u - 1].push_back(v - 1); } vector<int> d1 = bfs(0, N, G); vector<int> d2 = bfs(N - 2, N, G); vector<int> d3 = bfs(N - 1, N, G); int ans1 = d1[N - 2] + d2[N - 1] + d3[0]; int ans2 = d1[N - 1] + d3[N - 2] + d2[0]; if (min(ans1, ans2) >= INF) cout << -1 << '\n'; else cout << min(ans1, ans2) << '\n'; }