結果
問題 |
No.3291 K-step Navigation
|
ユーザー |
|
提出日時 | 2025-10-03 23:38:04 |
言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
結果 |
WA
|
実行時間 | - |
コード長 | 1,378 bytes |
コンパイル時間 | 999 ms |
コンパイル使用メモリ | 89,572 KB |
実行使用メモリ | 7,720 KB |
最終ジャッジ日時 | 2025-10-03 23:38:11 |
合計ジャッジ時間 | 6,289 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 2 |
other | AC * 42 WA * 9 |
ソースコード
#include<iostream> #include<vector> #include<queue> #include<algorithm> using namespace std; using ll = long long; using P = pair<int, int>; int main(void){ ll n, m, k, s, t; cin >> n >> m >> k >> s >> t; s--, t--; if(s>t) swap(s, t); bool con=false; vector<vector<int>> to(n); for(int i=0; i<m; i++){ int u, v; cin >> u >> v; u--, v--; to[u].push_back(v); to[v].push_back(u); if(u==s&&v==t) con=true; } if(k%2){ cout << "Yes" << endl; return 0; } int S=to[s].size(), T=to[t].size(); if(S){ if(S>=2||(S==1&&!con)){ cout << "Yes" << endl; return 0; } } if(T){ if(T>=2||(T==1&&!con)){ cout << "Yes" << endl; return 0; } } if(!con){ cout << "No" << endl; return 0; } int mini=1e9; auto BFS=[&](int st){ queue<P> bfs; vector dist(n, vector<int>(2, 1e9)); bfs.emplace(st, 0); dist[st][0]=0; while(bfs.size()){ auto [idx, d]=bfs.front(); bfs.pop(); if(dist[idx][d%2]!=d) continue; for(auto p:to[idx])if(p!=idx){ int nxt=d+1; if(dist[p][nxt%2]>nxt){ dist[p][nxt%2]=nxt; bfs.emplace(p, nxt); } } } return dist[st][1]; }; for(int i=0; i<n; i++)if(i!=s&&i!=t){ mini=min(mini, BFS(i)); } //cout << mini << endl; if(mini+3>=k) cout << "Yes" << endl; else cout << "No" << endl; return 0; }