55612023-07-27 11:19:33zsomborLabirintuscpp17Elfogadva 100/100507ms74028 KiB
#include <iostream>
#include <vector>
#include <queue>
#include "labirintus.h"
using namespace std;

int r,c;
vector <vector <int>> l;
vector <int> p(11e5,0);
vector <int> sz(11e5,1);
queue <int>q;
vector <int> P(11e5,0);
vector <int> SZ(11e5,1);

int holvan(int a){
    return (a==p[a]?a:holvan(p[a]));
}

void unio(int a,int b){
    a=holvan(a);
    b=holvan(b);
    if (a==b) return;
    if (sz[a]>sz[b]) swap(a,b);
    p[a]=b;
    sz[b]+=sz[a];
    q.push(a);
    q.push(b);
}

void betesz(int I,int J){
    l[I][J]=1;
    for (int i=I-1;i<=I+1;i++){
        for (int j=J-1;j<=J+1;j++){
            if (i==r || j==-1) {unio(I*c+J,r*c);continue;}
            if (i==-1 || j==c) {unio(I*c+J,r*c+1);continue;}
            if (l[i][j]) unio(I*c+J,i*c+j);
        }
    }
}

void init_labyrinth(int R, int C, vector <vector <int>> L){
    r=R;c=C;l=L;
    for (int i=0;i<r*c+2;i++) p[i]=i;
    for (int i=0;i<r;i++){
        for (int j=0;j<c;j++){
            if (l[i][j]) betesz(i,j);
        }
    }
    P=p;SZ=sz;
}

bool can_escape(int N, vector <int> U, vector <int> V){
    for (int i=0;i<N;i++) betesz(U[i],V[i]);
    bool ret=(holvan(r*c)!=holvan(r*c+1));
    for (int i=0;i<N;i++) l[U[i]][V[i]]=0;
    while(q.size()){
        p[q.front()]=P[q.front()];
        sz[q.front()]=SZ[q.front()];
        q.pop();
    }
    return ret;
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
subtask10/0
1Elfogadva19ms36064 KiB
2Elfogadva193ms68024 KiB
subtask215/15
3Elfogadva50ms37988 KiB
4Elfogadva25ms38288 KiB
5Elfogadva135ms37424 KiB
6Elfogadva137ms37060 KiB
7Elfogadva97ms38764 KiB
8Elfogadva101ms38976 KiB
subtask318/18
9Elfogadva231ms38664 KiB
10Elfogadva207ms38140 KiB
11Elfogadva505ms70756 KiB
12Elfogadva430ms70792 KiB
13Elfogadva481ms70796 KiB
14Elfogadva507ms72588 KiB
subtask428/28
15Elfogadva282ms71136 KiB
16Elfogadva280ms71264 KiB
17Elfogadva286ms71472 KiB
18Elfogadva166ms71536 KiB
19Elfogadva266ms72704 KiB
20Elfogadva136ms71532 KiB
21Elfogadva131ms71536 KiB
22Elfogadva270ms72964 KiB
23Elfogadva268ms72964 KiB
subtask539/39
24Elfogadva52ms41256 KiB
25Elfogadva32ms41012 KiB
26Elfogadva135ms41636 KiB
27Elfogadva137ms41140 KiB
28Elfogadva134ms41832 KiB
29Elfogadva134ms41676 KiB
30Elfogadva448ms72996 KiB
31Elfogadva460ms72996 KiB
32Elfogadva349ms70008 KiB
33Elfogadva432ms73848 KiB
34Elfogadva256ms74028 KiB
35Elfogadva248ms73912 KiB
36Elfogadva321ms72384 KiB
37Elfogadva319ms72340 KiB
38Elfogadva360ms72464 KiB
39Elfogadva321ms72340 KiB