結果
問題 |
No.3291 K-step Navigation
|
ユーザー |
|
提出日時 | 2025-10-03 23:19:20 |
言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
結果 |
MLE
|
実行時間 | - |
コード長 | 1,202 bytes |
コンパイル時間 | 997 ms |
コンパイル使用メモリ | 84,260 KB |
実行使用メモリ | 814,464 KB |
最終ジャッジ日時 | 2025-10-03 23:19:33 |
合計ジャッジ時間 | 3,266 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge3 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 2 |
other | AC * 11 MLE * 1 -- * 38 |
ソースコード
#include<iostream> #include<vector> #include<set> #include<algorithm> using namespace std; using ll = long long; 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; } vector<int> seen(n); int mini=1e9; auto dfs=[&](auto dfs, int st, int now, int cnt, int par=-1)->void { cnt++; seen[now]=1; for(auto p:to[now])if(p!=par){ if(st==p&&cnt%2){ mini=min(mini, cnt); continue; } dfs(dfs, st, p, cnt, now); } }; for(int i=0; i<n; i++)if(i!=s&&i!=t&&seen[i]==0){ dfs(dfs, i, i, 0); } //cout << mini << endl; if(mini+3>=k) cout << "Yes" << endl; else cout << "No" << endl; return 0; }