169732025-05-19 18:21:15algoproLabirintuscpp17Wrong answer 28/100488ms21552 KiB
// UUID: dc61ece6-0a99-435a-aa3c-b88ab211ed13
#include "labirintus.h"
#include <bits/stdc++.h>
using namespace std;
#include <cassert>
#include <cstdio>
#include <array>
#include <vector>
#include <queue>
vector<vector<int>> d;
int n,m;
const int mxn=1005,p=1e6+5;
bool vis[mxn][mxn];
vector<array<int, 2>> dir{{0,1},{1,0},{-1,0},{0,-1}};
int lep;
int fonok[p],mer[p];
int holvan(int x)
{
    return (fonok[x]==x?x:fonok[x]=holvan(fonok[x]));
}
void unio(int a, int b, int c, int d)
{
    int x=(a-1)*m+b-1;
    int y=(c-1)*m+d-1;
    x=holvan(x);
    y=holvan(y);
    if(mer[x]>mer[y]) swap(x,y);
    mer[y]+=mer[x];
    fonok[x]=y;
}
set<array<int, 2>> last;
void init_labyrinth(int r, int c, std::vector<std::vector<int>> L) {
    n=r,m=c;
    d.assign(n+2, vector<int> (m+2, 1));
    for(int i=1; i<=n; i++)
        for(int j=1; j<=m; j++)
        {
            d[i][j]=L[i-1][j-1];
            int f=(i-1)*m+j-1;
            mer[f]=1;
            fonok[f]=f;
        }
    return;
}
bool can_escape(int N, std::vector<int> u, std::vector<int> v) {
    lep++;
    if(lep==1)
    {
        for(int i=0; i<N; i++)
        {
            d[u[i]+1][v[i]+1]=1;
            last.insert({u[i],v[i]});
        }
        for(int i=1; i<=n; i++)
        {
            for(int j=1; j<=m; j++)
            {
                if(i>1 && d[i][j]==0 && d[i-1][j]==0) unio(i,j,i-1,j);
                if(j>1 && d[i][j]==0 && d[i][j-1]==0) unio(i,j,i,j-1);
            }
        }

    }
    else
    {
        set<array<int, 2>> curr;
        for(int i=0; i<N; i++)
        curr.insert({u[i],v[i]});
        vector<array<int, 2>> tor;
        for(auto &x:last)
        {
            if(curr.count(x)) continue;
            auto [a,b]=x;
            tor.push_back(x);
            a++,b++;
            d[a][b]=0;
            if(d[a+1][b]==0) unio(a+1,b,a,b);
            if(d[a-1][b]==0) unio(a-1,b,a,b);
            if(d[a][b+1]==0) unio(a,b+1,a,b);
            if(d[a][b-1]==0) unio(a,b-1,a,b);
        }
        for(auto &x:tor)
            last.erase(x);
    }
    return (holvan(0)==holvan((n-1)*m+m-1));
}

/*int main() {
    int R, C, Q;
    assert(3 == scanf("%d %d %d", &R, &C, &Q));

    std::vector<std::vector<int>> labyrinth(R, std::vector<int>(C));
    for (int i = 0; i < R; ++i) {
        for (int j = 0; j < C; ++j) {
            char c;
            assert(1 == scanf(" %c", &c));
            labyrinth[i][j] = c - '0';
        }
    }
    init_labyrinth(R, C, labyrinth);

    std::vector<int> answers(Q);
    for (int i = 0; i < Q; ++i) {
        int N;
        assert(1 == scanf("%d", &N));
        std::vector<int> U(N), V(N);
        for (int j = 0; j < N; ++j) {
            assert(2 == scanf("%d %d", &U[j], &V[j]));
        }
        answers[i] = can_escape(N, U, V);
    }

    for (int i = 0; i < Q; ++i) {
        printf("%d\n", answers[i]);
    }

    return 0;
}*/
SubtaskSumTestVerdictTimeMemory
subtask10/0
1Wrong answer1ms316 KiB
2Wrong answer150ms20028 KiB
subtask20/15
3Wrong answer35ms1076 KiB
4Wrong answer4ms1076 KiB
5Wrong answer237ms1076 KiB
6Wrong answer225ms612 KiB
7Wrong answer185ms1376 KiB
8Wrong answer186ms1332 KiB
subtask30/18
9Wrong answer172ms1076 KiB
10Wrong answer181ms820 KiB
11Wrong answer296ms20232 KiB
12Wrong answer298ms20020 KiB
13Wrong answer291ms20024 KiB
14Wrong answer294ms20020 KiB
subtask428/28
15Accepted388ms20024 KiB
16Accepted386ms19996 KiB
17Accepted400ms20024 KiB
18Accepted172ms20020 KiB
19Accepted384ms20020 KiB
20Accepted104ms20016 KiB
21Accepted104ms20024 KiB
22Accepted379ms19980 KiB
23Accepted381ms19992 KiB
subtask50/39
24Wrong answer35ms316 KiB
25Wrong answer17ms316 KiB
26Wrong answer237ms1268 KiB
27Wrong answer224ms576 KiB
28Wrong answer231ms564 KiB
29Wrong answer224ms568 KiB
30Wrong answer294ms20024 KiB
31Wrong answer300ms20020 KiB
32Wrong answer268ms19972 KiB
33Wrong answer305ms20020 KiB
34Wrong answer202ms20016 KiB
35Wrong answer196ms20020 KiB
36Wrong answer368ms20020 KiB
37Wrong answer345ms20020 KiB
38Wrong answer488ms21552 KiB
39Wrong answer335ms20036 KiB