본문 바로가기

algorithm

[BOJ] 9938 방청소

문제 설명 및 풀이 : http://www.secmem.org/blog/2022/01/16/How_to_approach_problems_7/

주의할 점 : 부모 배열을 p[x] = -1 로 초기화하는 것보다 p[x] = x 로 초기화하면 메모리 초과가 발생하지 않는다.

#include <iostream>

using namespace std;
int N,L;
bool A[300010]; // 0 empty, 1 full
int p[300010];

int find(int x){
    if(p[x] == x) return x;
    return p[x] = find(p[x]);
}
bool Union(int u, int v){
    u = find(u); v = find(v);
    if(A[u] && A[v]) return false;
    else if(!A[u] && !A[v]) {
        p[v] = u;
        A[v] = 1;
    }
    else{
        if(A[u]) swap(u,v);
        A[u] = 1;
        p[v] = u;
    }
    return true;
}
int main()
{
    ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
    cin>>N>>L;
    for(int i = 1; i <= L; i++) p[i] = i;
    for(int i = 0; i < N; i++){
        int x,y;cin>>x>>y;
        if(Union(x,y)) cout<<"LADICA\n";
        else cout<<"SMECE\n";
    }
    return 0;
}

'algorithm' 카테고리의 다른 글

[BOJ] 3178 코코스  (0) 2022.08.23
[BOJ] 20412 추첨상 사수 대작전  (0) 2022.08.12
유클리드 호제법, 모듈로 역원  (0) 2022.08.03
13335 트럭  (0) 2022.07.24
9345 디지털 비디오 디스크  (0) 2022.07.20