結果
問題 |
No.2948 move move rotti
|
ユーザー |
|
提出日時 | 2025-01-20 05:05:40 |
言語 | C++23 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 223 ms / 4,000 ms |
コード長 | 1,596 bytes |
コンパイル時間 | 6,139 ms |
コンパイル使用メモリ | 333,160 KB |
実行使用メモリ | 6,820 KB |
最終ジャッジ日時 | 2025-01-20 05:05:50 |
合計ジャッジ時間 | 9,640 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge3 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 28 |
ソースコード
#include <bits/stdc++.h> #include <atcoder/all> using namespace std; using ll = long long; const ll inf = 9e18; int main(){ ll n,m,k; cin >> n >> m >> k; ll bn=1<<n; vector<ll> x(k); for(ll i=0;i<k;i++){ cin >> x[i]; x[i]--; } vector<vector<ll>> g(n,vector<ll>(n,false)); for(ll i=0;i<m;i++){ ll u,v; cin >> u >> v; u--,v--; g[u][v]=true; g[v][u]=true; } vector<vector<ll>> cnt(n+1,vector<ll>(n)); for(ll p=0;p<k;p++){ vector<vector<bool>> dp(bn,vector<bool>(n,false)); dp[1<<x[p]][x[p]]=true; for(ll x=0;x<bn;x++){ for(ll i=0;i<n;i++){ if(!(x>>i&1)) continue; if(!dp[x][i]) continue; for(ll j=0;j<n;j++){ if(i==j) continue; if(x>>j&1) continue; if(!g[i][j]) continue; dp[x|1<<j][j]=true; } } } vector<vector<ll>> f(n+1,vector<ll>(n)); for(ll i=0;i<bn;i++){ for(ll j=0;j<n;j++){ if(!dp[i][j]) continue; ll tmp=__popcount(i); f[tmp][j]=true; } } for(ll i=0;i<=n;i++){ for(ll j=0;j<n;j++){ cnt[i][j]+=f[i][j]; } } } for(ll i=0;i<=n;i++){ for(ll j=0;j<n;j++){ if(cnt[i][j]!=k) continue; cout << "Yes" << endl; return 0; } } cout << "No" << endl; return 0; }