結果
| 問題 | No.2565 はじめてのおつかい | 
| コンテスト | |
| ユーザー |  Nichi10p | 
| 提出日時 | 2023-12-02 15:40:41 | 
| 言語 | C++17 (gcc 13.3.0 + boost 1.87.0) | 
| 結果 | 
                                AC
                                 
                             | 
| 実行時間 | 131 ms / 2,000 ms | 
| コード長 | 984 bytes | 
| コンパイル時間 | 1,935 ms | 
| コンパイル使用メモリ | 201,428 KB | 
| 最終ジャッジ日時 | 2025-02-18 04:49:56 | 
| ジャッジサーバーID (参考情報) | judge5 / 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';
}
            
            
            
        