169732025-05-19 18:21:15algoproLabirintuscpp17Hibás válasz 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;
}*/
RészfeladatÖsszpontTesztVerdiktIdőMemória
subtask10/0
1Hibás válasz1ms316 KiB
2Hibás válasz150ms20028 KiB
subtask20/15
3Hibás válasz35ms1076 KiB
4Hibás válasz4ms1076 KiB
5Hibás válasz237ms1076 KiB
6Hibás válasz225ms612 KiB
7Hibás válasz185ms1376 KiB
8Hibás válasz186ms1332 KiB
subtask30/18
9Hibás válasz172ms1076 KiB
10Hibás válasz181ms820 KiB
11Hibás válasz296ms20232 KiB
12Hibás válasz298ms20020 KiB
13Hibás válasz291ms20024 KiB
14Hibás válasz294ms20020 KiB
subtask428/28
15Elfogadva388ms20024 KiB
16Elfogadva386ms19996 KiB
17Elfogadva400ms20024 KiB
18Elfogadva172ms20020 KiB
19Elfogadva384ms20020 KiB
20Elfogadva104ms20016 KiB
21Elfogadva104ms20024 KiB
22Elfogadva379ms19980 KiB
23Elfogadva381ms19992 KiB
subtask50/39
24Hibás válasz35ms316 KiB
25Hibás válasz17ms316 KiB
26Hibás válasz237ms1268 KiB
27Hibás válasz224ms576 KiB
28Hibás válasz231ms564 KiB
29Hibás válasz224ms568 KiB
30Hibás válasz294ms20024 KiB
31Hibás válasz300ms20020 KiB
32Hibás válasz268ms19972 KiB
33Hibás válasz305ms20020 KiB
34Hibás válasz202ms20016 KiB
35Hibás válasz196ms20020 KiB
36Hibás válasz368ms20020 KiB
37Hibás válasz345ms20020 KiB
38Hibás válasz488ms21552 KiB
39Hibás válasz335ms20036 KiB