結果

問題 No.3291 K-step Navigation
ユーザー tau1235
提出日時 2025-10-03 22:42:34
言語 C++23
(gcc 13.3.0 + boost 1.87.0)
結果
WA  
実行時間 -
コード長 1,011 bytes
コンパイル時間 3,179 ms
コンパイル使用メモリ 288,480 KB
実行使用メモリ 7,716 KB
最終ジャッジ日時 2025-10-03 22:42:40
合計ジャッジ時間 5,770 ms
ジャッジサーバーID
(参考情報)
judge3 / judge1
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 2
other AC * 26 WA * 24
権限があれば一括ダウンロードができます

ソースコード

diff #

#include<bits/stdc++.h>
using namespace std;

int main(){
  using ll=long long;
  ll inf=2e18;
  ll n,m,k,s,t;
  cin>>n>>m>>k>>s>>t;
  s--;t--;
  vector<vector<int>> g(n);
  for (int i=0;i<m;i++){
    int u,v;
    cin>>u>>v;
    u--;v--;
    g[u].push_back(v);
    g[v].push_back(u);
  }
  auto f=[&](int s){
    vector<vector<ll>> dist(n,vector<ll>(2,inf));
    queue<pair<int,int>> q;
    dist[s][0]=0;
    q.push({s,0});
    while (!q.empty()){
      auto [v,i]=q.front();
      q.pop();
      for (int u:g[v]){
        if (dist[u][i^1]!=inf) continue;
        dist[u][i^1]=dist[v][i]+1;
        q.push({u,i^1});
      }
    }
    return dist;
  };
  auto ds=f(s),dt=f(t);
  bool ok=false;
  auto check=[&](ll d){
    int i=d%2;
    if (d<k) return;
    if (d%2==k%2) ok=true;
  };
  check(ds[t][0]);
  check(ds[t][1]);
  for (int v=0;v<n;v++) for (int u=0;u<n;u++){
    for (int i=0;i<2;i++) for (int j=0;j<2;j++){
      check(ds[v][i]+dt[u][j]+1);
    }
  }
  if (ok) cout<<"Yes\n";
  else cout<<"No\n";
}
0