結果

問題 No.2565 はじめてのおつかい
ユーザー Nichi10pNichi10p
提出日時 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
権限があれば一括ダウンロードができます

ソースコード

diff #

#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';
}
0