結果
| 問題 |
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;
}