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
AC × 3
AC × 25
AC × 29
AC × 48
AC × 30
AC × 109
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