結果
問題 |
No.3291 K-step Navigation
|
ユーザー |
![]() |
提出日時 | 2025-10-04 00:53:42 |
言語 | C++23 (gcc 13.3.0 + boost 1.87.0) |
結果 |
WA
|
実行時間 | - |
コード長 | 2,128 bytes |
コンパイル時間 | 5,897 ms |
コンパイル使用メモリ | 335,608 KB |
実行使用メモリ | 7,716 KB |
最終ジャッジ日時 | 2025-10-04 00:53:50 |
合計ジャッジ時間 | 7,725 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 2 |
other | AC * 49 WA * 2 |
ソースコード
#include<bits/stdc++.h> #include<atcoder/all> using namespace std; using ll = long long; int main() { // s-t みたいな時、Kが奇数なら行き来するだけでいい?? // K=2nかつs, t が孤立してる時だけ無理? ll N, M, K, s, t; cin >> N >> M >> K >> s >> t; vector<int> U(M), V(M); unordered_set<int> ss, ts; vector E(N, vector<int>()); s--; t--; for (int i=0;i<M;i++) { cin >> U[i] >> V[i]; U[i]--; V[i]--; E[U[i]].push_back(V[i]); E[V[i]].push_back(U[i]); if (U[i]==s) ss.insert(V[i]); if (V[i]==s) ss.insert(U[i]); if (U[i]==t) ts.insert(V[i]); if (V[i]==t) ts.insert(U[i]); } // s,tにつなげた点xが奇数回ターンを潰せること // 奇数の頂点を持つサイクルをとれたらいい // -> BFSして他の点スタートと合流する bool condition_x = false; vector<int> dist(N,1e9); for (int i=0;i<N;i++) { if (dist[i]<1e9) continue; // もう見た連結成分 if (i==s || i==t) continue; queue<int> q; q.push(i); dist[i] = 0; while(!q.empty()) { int c = q.front(); q.pop(); for (int nx: E[c]) { ll cost = (ll)dist[c] + 1L; if (dist[nx]<1e9) { int total = dist[nx] + dist[c]; if (total%2==0 && total<K-3L) { condition_x = true; break; } } if (cost<dist[nx]) { dist[nx] = cost; q.push(nx); } } } } if (K%2L==0L) { if (ss.empty() && ts.empty()) { cout << "No" << endl; return 0; } if (N==2) { cout << "No" << endl; return 0; } if (ss.contains(t) && ss.size()==1 && ts.size()==1 && !condition_x) { cout << "No" << endl; return 0; } } cout << "Yes" << endl; return 0; }