結果
問題 | No.2565 はじめてのおつかい |
ユーザー | Nichi10p |
提出日時 | 2023-12-02 15:40:41 |
言語 | C++17(gcc12) (gcc 12.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 178 ms / 2,000 ms |
コード長 | 984 bytes |
コンパイル時間 | 2,311 ms |
コンパイル使用メモリ | 208,240 KB |
実行使用メモリ | 26,752 KB |
最終ジャッジ日時 | 2024-09-26 19:08:02 |
合計ジャッジ時間 | 7,816 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 50 |
ソースコード
#include <bits/stdc++.h> template<class T> bool chmin(T &a, const T &x) { return x < a ? a = x, true : false; } int main() { int N, M; std::cin >> N >> M; std::vector<std::vector<int>> G(4*N + 1); while (M--) { int u, v; std::cin >> u >> v; if (v < N-1) { for (int s = 0; s < (1 << 2); ++s) G[s*N + u].push_back(s*N + v); } if (v == N-1) { G[0b00*N + u].push_back(0b01*N + v); G[0b10*N + u].push_back(0b11*N + v); } if (v == N) { G[0b00*N + u].push_back(0b10*N + v); G[0b01*N + u].push_back(0b11*N + v); } } constexpr int inf = 1000000000; std::vector<int> D(4*N + 1, inf); std::queue<int> bfs; D[1] = 0; bfs.push(1); while (!bfs.empty()) { const int u = bfs.front(); bfs.pop(); for (const int &v : G[u]) if (D[v] == inf) D[v] = D[u] + 1, bfs.push(v); } if (D[0b11*N + 1] < inf) std::cout << D[0b11*N + 1] << '\n'; else std::cout << "-1" << '\n'; }