Submission #889490

#TimeUsernameProblemLanguageResultExecution timeMemory
889490fragadmscTracks in the Snow (BOI13_tracks)C++17
3.33 / 100
1129 ms1048576 KiB
#include <bits/stdc++.h>
using namespace std;
 
typedef pair<long long, long long> pii;
typedef long long ll;
typedef long double ld;
 
const long long MAXLOG = 23;
const long long MAXN = 4*1e3+3; // use com cuidado
const long long MOD = 998244353;
const long long inf = 1e9 + 10;
const long long TWO_MOD_INV = 500000004;
 
#define pb push_back
#define mp make_pair
#define f first
#define s second
#define KAMEKAMEHA ios_base::sync_with_stdio(0); ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
#define sz(x) (int)x.size()

vector<ll> dist(MAXN, inf);
vector<pii> grafo[MAXN*MAXN];

void bfs() {
    deque<ll> pq;
    dist[1]=0;
    pq.push_back(1);
    while(!pq.empty()) {
        ll v=pq.front();
        pq.pop_front();
        for(auto i : grafo[v]) {
            if(dist[i.f]>dist[v] + i.s) {
                dist[i.f]=dist[v] + i.s;
                if(i.s) {
                    pq.push_back(i.f);
                } else {
                    pq.push_front(i.f);
                }
            }
        }
    }
}

int main() {
    KAMEKAMEHA
    #ifdef FRAGA     
        freopen("output.out", "w", stdout);
        freopen("err.er", "w", stderr);
    #endif 
    #ifndef FRAGA
        //freopen("cbarn2.in", "r", stdin);
        //freopen("cbarn2.out", "w", stdout);
    #endif
    ll h, w;
    cin>>h>>w;
    char mat[MAXN][MAXN];
    for(ll i=0;i<=h+1;i++) {
        for(ll j=0;j<=w+1;j++) {
            mat[i][j]='.';
        }
    }
    for(ll i=1;i<=h;i++) {
        for(ll j=1;j<=w;j++) {
            cin>>mat[i][j];
        }
    }
    
    for(ll i=1;i<=h;i++) {
        for(ll j=1;j<=w;j++) {
            if(mat[i][j]=='.') continue;
            ll atu=(i-1)*w+j;
            if(mat[i-1][j]!='.') {
                if(mat[i+1][j]==mat[i][j]) {
                    grafo[atu].pb(mp((i-2)*w+j, 0));
                } else {
                    grafo[atu].pb(mp((i-2)*w+j, 1));
                }
            }
            if(mat[i+1][j]!='.') {
                if(mat[i+1][j]==mat[i][j]) {
                    grafo[atu].pb(mp((i)*w+j, 0));
                } else {
                    grafo[atu].pb(mp((i)*w+j, 1));
                }
            }
            if(mat[i][j-1]!='.') {
                if(mat[i][j-1]==mat[i][j]) {
                    grafo[atu].pb(mp((i-1)*w+j-1, 0));
                } else {
                    grafo[atu].pb(mp((i-1)*w+j-1, 1));
                }
            }
            if(mat[i][j+1]!='.') {
                if(mat[i][j+1]==mat[i][j]) {
                    grafo[atu].pb(mp((i-1)*w+j+1, 0));
                } else {
                    grafo[atu].pb(mp((i-1)*w+j+1, 1));
                }
            }
        }
    }
    bfs();
    ll mt=0;
    for(ll i=1;i<=h*w;i++) {
        if(dist[i]!=inf)
            mt=max(mt, dist[i]);
    }
    cout<<mt+1<<endl;
    //indices conflitantes
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...