結果
問題 |
No.3291 K-step Navigation
|
ユーザー |
![]() |
提出日時 | 2025-10-04 00:21:31 |
言語 | C++23 (gcc 13.3.0 + boost 1.87.0) |
結果 |
WA
|
実行時間 | - |
コード長 | 1,983 bytes |
コンパイル時間 | 6,064 ms |
コンパイル使用メモリ | 335,472 KB |
実行使用メモリ | 7,720 KB |
最終ジャッジ日時 | 2025-10-04 00:21:39 |
合計ジャッジ時間 | 7,283 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 2 |
other | AC * 32 WA * 19 |
ソースコード
#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>()); 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が奇数回ターンを潰せること // ぐるっとまわってxに戻るのが奇数手 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]) { int cost = dist[c] + 1; if (dist[nx]<1e9) { if (dist[c]%2==0) { 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; }