Submission #1370276

#TimeUsernameProblemLanguageResultExecution timeMemory
1370276FaresSTHZoo (COCI19_zoo)C++20
0 / 110
4 ms580 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){
        if(!swp)v[a.F][a.S]=v[b.F][b.S];
        else v[b.F][b.S]=v[a.F][a.S];
    }
    else 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';
    // }   
    for(int ans=1;ans<=n+m;ans++){
        cout<<ans<<'\n';
        auto a=v[fp({0,0}).F][fp({0,0}).S];
        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+(a.size() ? 1 : 0),0;
    }
}
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...