結果
問題 |
No.13 囲みたい!
|
ユーザー |
|
提出日時 | 2025-06-09 14:15:17 |
言語 | C++17(gcc12) (gcc 12.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 4 ms / 5,000 ms |
コード長 | 1,463 bytes |
コンパイル時間 | 5,295 ms |
コンパイル使用メモリ | 219,988 KB |
実行使用メモリ | 6,272 KB |
最終ジャッジ日時 | 2025-06-09 14:15:25 |
合計ジャッジ時間 | 6,273 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge3 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 16 |
ソースコード
#include <bits/stdc++.h> using namespace std; using ll = long long; int main() { ios::sync_with_stdio(false); cin.tie(nullptr); int W,H; cin>>W>>H; vector<vector<int>> grid(H, vector<int>(W)); for(int i=0;i<H;++i){ for(int j=0;j<W;++j){ cin>>grid[i][j]; } } vector<vector<int>> g(H*W); auto id = [&] (int i, int j){ return i*W+j; }; for(int i=0;i+1<H;++i){ for(int j=0;j<W;++j){ if(grid[i][j]==grid[i+1][j]){ g[id(i,j)].emplace_back(id(i+1,j)); g[id(i+1,j)].emplace_back(id(i,j)); } } } for(int i=0;i<H;++i){ for(int j=0;j+1<W;++j){ if(grid[i][j]==grid[i][j+1]){ g[id(i,j)].emplace_back(id(i,j+1)); g[id(i,j+1)].emplace_back(id(i,j)); } } } vector<bool> vis(H*W); bool found = false; for(int i=0;i<H*W;++i){ if(vis[i]) continue; vis[i]=true; ll V=1; ll E=0; stack<int> stk; stk.emplace(i); while(!stk.empty()){ auto u = stk.top(); stk.pop(); E+=g[u].size(); for(auto& v: g[u]){ if(vis[v]) continue; vis[v]=true; V+=1; stk.emplace(v); } } E/=2; if(V<=E){ found=true; break; } } cout<<(found?"possible":"impossible")<<endl; return 0; }