Submission #1370291

#TimeUsernameProblemLanguageResultExecution timeMemory
1370291FaresSTHZoo (COCI19_zoo)C++20
45 / 110
285 ms589824 KiB
#include"bits/stdc++.h"
using namespace std;
using ll=long long;
#define S second
#define F first
const int dx[]={0,0,1,-1};
const int dy[]={1,-1,0,0};
const int mxn=1005;
vector<pair<int,int>>v[mxn][mxn];
pair<int,int>p[mxn][mxn];
int sz[mxn][mxn];
char g[mxn][mxn];
pair<int,int>fp(pair<int,int>i){
    if(p[i.F][i.S]==i)return i;
    return p[i.F][i.S]=fp(p[i.F][i.S]);
}
void mrg(pair<int,int>a,pair<int,int>b,bool t){
    bool swp=0;
    a=fp(a),b=fp(b);
    if(a==b)return;
    if(sz[a.F][a.S]>sz[b.F][b.S])swap(a,b),swp=1;
    // if(t)cout<<
    for(auto i:v[b.F][b.S])v[a.F][a.S].push_back(i);
    sz[a.F][a.S]+=sz[b.F][b.S];
    p[b.F][b.S]=a;
}
int main(){
    cin.tie(0)->sync_with_stdio(0);
    int n,m;
    cin>>n>>m;
    int no=0;
    for(int i=0;i<n;i++){
        for(int j=0;j<m;j++){
            cin>>g[i][j];
            if(g[i][j]!='*')no++;
            p[i][j]={i,j};
            sz[i][j]=1;
        }
    }
    for(int i=0;i<n;i++){
        for(int j=0;j<m;j++){
            if(g[i][j]=='*')continue;
            for(int d=0;d<4;d++){
                int ni=i+dx[d];
                int nj=j+dy[d];
                if(ni>=n||ni<0||nj>=m||nj<0||g[ni][nj]=='*')continue;
                if(g[ni][nj]==g[i][j])mrg({i,j},{ni,nj},0);
                else v[fp({i,j}).F][fp({i,j}).S].push_back({ni,nj});
            }   
        }
    }
    // cout<<endl<<endl;
    // auto a=v[fp({0,0}).F][fp({0,0}).S];
    // for(auto i:a){
    //     cout<<i.F<<' '<<i.S<<'\n';
    // }   
    if(sz[fp({0,0}).F][fp({0,0}).S]==no) {
        cout << 1; return 0;
    }    
    for(int ans=1;ans<=n*m;ans++){
        // cout<<ans<<'\n';
        auto a=v[fp({0,0}).F][fp({0,0}).S];
        v[fp({0,0}).F][fp({0,0}).S].clear();
        for(auto i:a){
            mrg({0,0},i,1);
            // cout<<i.F<<' '<<i.S<<'\n';
        }
        // cout<<endl;
        if(sz[fp({0,0}).F][fp({0,0}).S]==no)return cout<<ans+1,0;
    }
}
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...