Submission #37386657
Source Code Expand
// JOI2022/2023 二次予選 C - 塗りつぶし (Painting)
#include <bits/stdc++.h>
using namespace std;
//それぞれ、こんな感じに短縮しています…!
using ll = long long;
#define ALL(a) (a).begin(),(a).end()
using v_vll = vector<vector<ll>>;
//
//4近傍の座標の差分をひとまとめにしました!
vector<ll> di={1,0,-1,0};
vector<ll> dj={0,-1,0,1};
//
ll H,W;
ll connected_componets_size=0;//連結成分に含まれるマスの数
v_vll reference_nums;//各連結成分に振られた整理番号をマスごとに保持する
v_vll A;//与えられた盤面を保持する
ll assigned_refernce_number=0;//現在割り当て中の整理番号
//(DFSをする前に毎度インクリメントするので実際には1からはじまります)
void DFS(ll nowi,ll nowj,ll wanted_color){
if(reference_nums[nowi][nowj]>0){return ;}
else{
connected_componets_size++;
reference_nums[nowi][nowj]=assigned_refernce_number;
for(ll i=0;i<4;i++){
if(1<= nowi+di[i] and nowi+di[i]<=H and 1<=nowj+dj[i] and nowj+dj[i]<=W){
//移動先が範囲内ならば…移動先の色を調べる
if(A[nowi+di[i]][nowj+dj[i]]==wanted_color){
DFS(nowi+di[i],nowj+dj[i],wanted_color);
}
}
}
return ;
}
}
vector<vector<bool>> visited;
v_vll graph;
//visitedは無限ループに陥るのを防ぐための目印
//graphでは、各連結成分の隣接関係を管理する
void DFS_2(ll nowi,ll nowj,ll ref_num){
//ref_num:現在注目中の連結成分に割り振られた整理番号
//(reference_numberはながいので)
if(visited[nowi][nowj]==true){return ;}
else{
visited[nowi][nowj]=true;
for(ll i=0;i<4;i++){
if(1<= nowi+di[i] and nowi+di[i]<=H and 1<=nowj+dj[i] and nowj+dj[i]<=W){
//移動先が範囲内ならば
//移動先の整理番号を調べる
if(reference_nums[nowi+di[i]][nowj+dj[i]]==ref_num){
//移動先のマスの整理番号が注目中のマスのものに等しければ
DFS_2(nowi+di[i],nowj+dj[i],ref_num);
}
else{
//隣接する連結成分として登録!
graph.at(ref_num).push_back(reference_nums[nowi+di[i]][nowj+dj[i]]);
}
}
}
return ;
}
}
int main(){
cin>>H>>W;
reference_nums.resize(H+1);
for(ll i=1;i<=H;i++){
reference_nums.at(i).resize(W+1,-1);
}
A.resize(H+1);
for(ll i=1;i<=H;i++){
A.at(i).resize(W+1);
}
for(ll i=1;i<=H;i++){
for(ll j=1;j<=W;j++){
cin>>A[i][j];
}
}
//Part.1 START>>
map<ll,pair<ll,ll>> color_and_quantity;
map<ll,pair<ll,ll>> representatives;
for(ll i=1;i<=H;i++){
for(ll j=1;j<=W;j++){
if(reference_nums[i][j]>0){continue;}
else{
connected_componets_size=0;
assigned_refernce_number++;
DFS(i,j,A[i][j]);
color_and_quantity[assigned_refernce_number]={A[i][j],connected_componets_size};
representatives[assigned_refernce_number]={i,j};
}
}
}
//<<Part1.END
//Part2.START>>
visited.resize(H+1);
graph.resize(assigned_refernce_number+1);//連結成分の数だけ、ドラマがある
for(ll i=1;i<=H;i++){//visitedの初期化
visited.at(i).resize(W+1,0);
}
for(ll i=1;i<=assigned_refernce_number;i++){
pair<ll,ll> coord=representatives[i];
DFS_2(coord.first,coord.second,i);
}
for(ll i=1;i<=assigned_refernce_number;i++){
//隣接リストのうち、重複しているものは削除。これでもなぜか間に合います
sort(ALL(graph[i]));
graph[i].erase(unique(graph[i].begin(), graph[i].end()), graph[i].end());
}
//<<Part2.END
//Part3.START>>
ll ans=0;
ll looking;//現在注目中の連結成分のマスの数
for(ll i=1;i<=assigned_refernce_number;i++){
looking=color_and_quantity[i].second;
map<ll,ll> surrounding_color_and_quantity;//隣接する連結成分に含まれるマスの色と、その合計の数
for(ll a:graph[i]){
surrounding_color_and_quantity[color_and_quantity[a].first]+=color_and_quantity[a].second;
//<補足>
//color_and_quantity[a].first:整理番号aの連結成分の色
//color_and_quantity[a].second:整理番号aの連結成分のマスの数
}
ll maxel=0;//max_element
for(auto b:surrounding_color_and_quantity){
maxel=max(maxel,b.second);
}
ans=max(ans,maxel+looking);
}
cout<<ans<<endl;
//おつかれさまでした!!
}
Submission Info
| Submission Time | |
|---|---|
| Task | C - 塗りつぶし (Painting) |
| User | CTSheep |
| Language | C++ (GCC 9.2.1) |
| Score | 100 |
| Code Size | 5107 Byte |
| Status | AC |
| Exec Time | 630 ms |
| Memory | 55996 KiB |
Judge Result
| Set Name | Sample | Subtask1 | Subtask2 | Subtask3 | Subtask4 | Subtask5 | ||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Score / Max Score | 0 / 0 | 9 / 9 | 32 / 32 | 18 / 18 | 10 / 10 | 31 / 31 | ||||||||||||
| Status |
|
|
|
|
|
|
| Set Name | Test Cases |
|---|---|
| Sample | sample-01.txt, sample-02.txt, sample-03.txt |
| Subtask1 | 01-01.txt, 01-02.txt, 01-03.txt, 01-04.txt, 01-05.txt, 01-06.txt, 01-07.txt, 01-08.txt, 01-09.txt, 01-10.txt, 01-11.txt, 01-12.txt, 01-13.txt, 01-14.txt, 01-15.txt, 01-16.txt, 01-17.txt, 01-18.txt, 01-19.txt, 01-20.txt, 01-21.txt, 01-22.txt, 01-23.txt, 01-24.txt, 01-25.txt |
| Subtask2 | 01-01.txt, 01-02.txt, 02-01.txt, 02-02.txt, 02-03.txt, 02-04.txt, 02-05.txt, 02-06.txt, 02-07.txt, 02-08.txt, 02-09.txt, 02-10.txt, 02-11.txt, 02-12.txt, 02-13.txt, 02-14.txt, 02-15.txt, 02-16.txt, 02-17.txt, 02-18.txt, 02-19.txt, 02-20.txt, 02-21.txt, 02-22.txt, 02-23.txt, 02-24.txt, sample-01.txt, sample-02.txt, sample-03.txt |
| Subtask3 | 01-01.txt, 01-02.txt, 02-01.txt, 02-02.txt, 02-03.txt, 02-04.txt, 02-05.txt, 02-06.txt, 02-07.txt, 02-08.txt, 02-09.txt, 02-10.txt, 02-11.txt, 02-12.txt, 02-13.txt, 02-14.txt, 02-15.txt, 02-16.txt, 02-17.txt, 02-18.txt, 02-19.txt, 02-20.txt, 02-21.txt, 02-22.txt, 02-23.txt, 02-24.txt, 03-01.txt, 03-02.txt, 03-03.txt, 03-04.txt, 03-05.txt, 03-06.txt, 03-07.txt, 03-08.txt, 03-09.txt, 03-10.txt, 03-11.txt, 03-12.txt, 03-13.txt, 03-14.txt, 03-15.txt, 03-16.txt, 03-17.txt, 03-18.txt, 03-19.txt, sample-01.txt, sample-02.txt, sample-03.txt |
| Subtask4 | 01-01.txt, 01-02.txt, 01-04.txt, 01-05.txt, 01-06.txt, 01-07.txt, 01-08.txt, 01-09.txt, 02-01.txt, 02-02.txt, 02-03.txt, 02-04.txt, 04-01.txt, 04-02.txt, 04-03.txt, 04-04.txt, 04-05.txt, 04-06.txt, 04-07.txt, 04-08.txt, 04-09.txt, 04-10.txt, 04-11.txt, 04-12.txt, 04-13.txt, 04-14.txt, 04-15.txt, 04-16.txt, 04-17.txt, sample-03.txt |
| Subtask5 | 01-01.txt, 01-02.txt, 01-03.txt, 01-04.txt, 01-05.txt, 01-06.txt, 01-07.txt, 01-08.txt, 01-09.txt, 01-10.txt, 01-11.txt, 01-12.txt, 01-13.txt, 01-14.txt, 01-15.txt, 01-16.txt, 01-17.txt, 01-18.txt, 01-19.txt, 01-20.txt, 01-21.txt, 01-22.txt, 01-23.txt, 01-24.txt, 01-25.txt, 02-01.txt, 02-02.txt, 02-03.txt, 02-04.txt, 02-05.txt, 02-06.txt, 02-07.txt, 02-08.txt, 02-09.txt, 02-10.txt, 02-11.txt, 02-12.txt, 02-13.txt, 02-14.txt, 02-15.txt, 02-16.txt, 02-17.txt, 02-18.txt, 02-19.txt, 02-20.txt, 02-21.txt, 02-22.txt, 02-23.txt, 02-24.txt, 03-01.txt, 03-02.txt, 03-03.txt, 03-04.txt, 03-05.txt, 03-06.txt, 03-07.txt, 03-08.txt, 03-09.txt, 03-10.txt, 03-11.txt, 03-12.txt, 03-13.txt, 03-14.txt, 03-15.txt, 03-16.txt, 03-17.txt, 03-18.txt, 03-19.txt, 04-01.txt, 04-02.txt, 04-03.txt, 04-04.txt, 04-05.txt, 04-06.txt, 04-07.txt, 04-08.txt, 04-09.txt, 04-10.txt, 04-11.txt, 04-12.txt, 04-13.txt, 04-14.txt, 04-15.txt, 04-16.txt, 04-17.txt, 05-01.txt, 05-02.txt, 05-03.txt, 05-04.txt, 05-05.txt, 05-06.txt, 05-07.txt, 05-08.txt, 05-09.txt, 05-10.txt, 05-11.txt, 05-12.txt, 05-13.txt, 05-14.txt, 05-15.txt, 05-16.txt, 05-17.txt, 05-18.txt, 05-19.txt, 05-20.txt, 05-21.txt, sample-01.txt, sample-02.txt, sample-03.txt |
| Case Name | Status | Exec Time | Memory |
|---|---|---|---|
| 01-01.txt | AC | 6 ms | 3464 KiB |
| 01-02.txt | AC | 2 ms | 3528 KiB |
| 01-03.txt | AC | 2 ms | 3524 KiB |
| 01-04.txt | AC | 2 ms | 3524 KiB |
| 01-05.txt | AC | 2 ms | 3512 KiB |
| 01-06.txt | AC | 2 ms | 3512 KiB |
| 01-07.txt | AC | 2 ms | 3496 KiB |
| 01-08.txt | AC | 2 ms | 3648 KiB |
| 01-09.txt | AC | 2 ms | 3624 KiB |
| 01-10.txt | AC | 2 ms | 3580 KiB |
| 01-11.txt | AC | 3 ms | 3500 KiB |
| 01-12.txt | AC | 2 ms | 3440 KiB |
| 01-13.txt | AC | 2 ms | 3512 KiB |
| 01-14.txt | AC | 2 ms | 3508 KiB |
| 01-15.txt | AC | 2 ms | 3440 KiB |
| 01-16.txt | AC | 3 ms | 3544 KiB |
| 01-17.txt | AC | 4 ms | 3484 KiB |
| 01-18.txt | AC | 3 ms | 3492 KiB |
| 01-19.txt | AC | 2 ms | 3564 KiB |
| 01-20.txt | AC | 2 ms | 3468 KiB |
| 01-21.txt | AC | 2 ms | 3480 KiB |
| 01-22.txt | AC | 2 ms | 3556 KiB |
| 01-23.txt | AC | 3 ms | 3468 KiB |
| 01-24.txt | AC | 2 ms | 3492 KiB |
| 01-25.txt | AC | 2 ms | 3408 KiB |
| 02-01.txt | AC | 2 ms | 3556 KiB |
| 02-02.txt | AC | 2 ms | 3656 KiB |
| 02-03.txt | AC | 2 ms | 3504 KiB |
| 02-04.txt | AC | 2 ms | 3448 KiB |
| 02-05.txt | AC | 2 ms | 3464 KiB |
| 02-06.txt | AC | 2 ms | 3652 KiB |
| 02-07.txt | AC | 2 ms | 3428 KiB |
| 02-08.txt | AC | 2 ms | 3580 KiB |
| 02-09.txt | AC | 2 ms | 3504 KiB |
| 02-10.txt | AC | 2 ms | 3552 KiB |
| 02-11.txt | AC | 2 ms | 3512 KiB |
| 02-12.txt | AC | 2 ms | 3504 KiB |
| 02-13.txt | AC | 3 ms | 3448 KiB |
| 02-14.txt | AC | 2 ms | 3656 KiB |
| 02-15.txt | AC | 3 ms | 3512 KiB |
| 02-16.txt | AC | 2 ms | 3436 KiB |
| 02-17.txt | AC | 3 ms | 3744 KiB |
| 02-18.txt | AC | 4 ms | 3652 KiB |
| 02-19.txt | AC | 4 ms | 3584 KiB |
| 02-20.txt | AC | 3 ms | 3668 KiB |
| 02-21.txt | AC | 2 ms | 3588 KiB |
| 02-22.txt | AC | 2 ms | 3512 KiB |
| 02-23.txt | AC | 2 ms | 3596 KiB |
| 02-24.txt | AC | 2 ms | 3692 KiB |
| 03-01.txt | AC | 2 ms | 3576 KiB |
| 03-02.txt | AC | 3 ms | 3512 KiB |
| 03-03.txt | AC | 2 ms | 3600 KiB |
| 03-04.txt | AC | 6 ms | 3516 KiB |
| 03-05.txt | AC | 2 ms | 3420 KiB |
| 03-06.txt | AC | 2 ms | 3560 KiB |
| 03-07.txt | AC | 2 ms | 3628 KiB |
| 03-08.txt | AC | 3 ms | 3440 KiB |
| 03-09.txt | AC | 2 ms | 3516 KiB |
| 03-10.txt | AC | 2 ms | 3512 KiB |
| 03-11.txt | AC | 2 ms | 3644 KiB |
| 03-12.txt | AC | 5 ms | 3660 KiB |
| 03-13.txt | AC | 6 ms | 3656 KiB |
| 03-14.txt | AC | 6 ms | 3664 KiB |
| 03-15.txt | AC | 4 ms | 3736 KiB |
| 03-16.txt | AC | 2 ms | 3428 KiB |
| 03-17.txt | AC | 2 ms | 3484 KiB |
| 03-18.txt | AC | 4 ms | 3772 KiB |
| 03-19.txt | AC | 3 ms | 3708 KiB |
| 04-01.txt | AC | 78 ms | 34732 KiB |
| 04-02.txt | AC | 71 ms | 34724 KiB |
| 04-03.txt | AC | 60 ms | 10204 KiB |
| 04-04.txt | AC | 60 ms | 10196 KiB |
| 04-05.txt | AC | 60 ms | 10252 KiB |
| 04-06.txt | AC | 60 ms | 10208 KiB |
| 04-07.txt | AC | 123 ms | 17972 KiB |
| 04-08.txt | AC | 123 ms | 17856 KiB |
| 04-09.txt | AC | 119 ms | 17860 KiB |
| 04-10.txt | AC | 559 ms | 55932 KiB |
| 04-11.txt | AC | 557 ms | 55996 KiB |
| 04-12.txt | AC | 57 ms | 12312 KiB |
| 04-13.txt | AC | 57 ms | 12104 KiB |
| 04-14.txt | AC | 61 ms | 12156 KiB |
| 04-15.txt | AC | 63 ms | 12076 KiB |
| 04-16.txt | AC | 64 ms | 24524 KiB |
| 04-17.txt | AC | 68 ms | 24820 KiB |
| 05-01.txt | AC | 113 ms | 34812 KiB |
| 05-02.txt | AC | 157 ms | 17836 KiB |
| 05-03.txt | AC | 160 ms | 17972 KiB |
| 05-04.txt | AC | 159 ms | 17776 KiB |
| 05-05.txt | AC | 64 ms | 8280 KiB |
| 05-06.txt | AC | 65 ms | 8240 KiB |
| 05-07.txt | AC | 65 ms | 8316 KiB |
| 05-08.txt | AC | 65 ms | 8232 KiB |
| 05-09.txt | AC | 126 ms | 13368 KiB |
| 05-10.txt | AC | 128 ms | 13444 KiB |
| 05-11.txt | AC | 125 ms | 13360 KiB |
| 05-12.txt | AC | 596 ms | 55808 KiB |
| 05-13.txt | AC | 611 ms | 55936 KiB |
| 05-14.txt | AC | 630 ms | 55852 KiB |
| 05-15.txt | AC | 626 ms | 55928 KiB |
| 05-16.txt | AC | 97 ms | 12236 KiB |
| 05-17.txt | AC | 99 ms | 12228 KiB |
| 05-18.txt | AC | 99 ms | 12156 KiB |
| 05-19.txt | AC | 99 ms | 12156 KiB |
| 05-20.txt | AC | 379 ms | 54880 KiB |
| 05-21.txt | AC | 389 ms | 54712 KiB |
| sample-01.txt | AC | 3 ms | 3468 KiB |
| sample-02.txt | AC | 2 ms | 3392 KiB |
| sample-03.txt | AC | 2 ms | 3464 KiB |