algorithm

๋ฐฑ์ค€ 16965

rkawk 2024. 7. 30. 22:59

๋ฌธ์ œ

์ „์ฒด ์ฟผ๋ฆฌ์˜ ์ˆ˜(๊ตฌ๊ฐ„์˜ ์ตœ๋Œ€ ์ˆ˜)๊ฐ€ 100 ์ดํ•˜๋ผ๋Š” ์ „์ œ๋กœ ๋ชจ๋“  ๊ตฌ๊ฐ„์— ๋Œ€ํ•œ BFS๋ฅผ ์ง„ํ–‰ํ•จ์œผ๋กœ์„œ ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค.

UnionFind๋กœ ํ’€์ดํ•˜๋‹ค ์‹คํŒจํ–ˆ๋Š”๋ฐ, ๊ตฌ๊ฐ„์˜ ์ˆœ์„œ๊ฐ€ ๊ตฌ๊ฐ„์˜ ํฌํ•จ ์—ฌ๋ถ€์— ์˜ํ–ฅ์„ ๋ฏธ์น˜๋ฏ€๋กœ ๋ชจ๋“  ๊ตฌ๊ฐ„์˜ ํฌํ•จ ๊ด€๊ณ„๊ฐ€ ๊ฐฑ์‹ ๋˜์—ˆ์„๋•Œ ๊ฐ๊ฐ์˜ ํฌํ•จ๋œ ๊ตฌ๊ฐ„์— ๋Œ€ํ•œ UnionFind๋ฅผ ๋‹ค์‹œ ์ˆ˜ํ–‰ํ•ด์ค˜์•ผ ์ด ๋ฌธ์ œ๋ฅผ ํ’€์ดํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฏ€๋กœ ๋‹จ์ˆœํ•œ BFS๋กœ ๋ฌธ์ œ๋ฅผ ์žฌ๊ตฌ์„ฑํ–ˆ๋‹ค.

 

๊ฒฐ๊ตญ ์™„์ „ํƒ์ƒ‰์œผ๋กœ ํ’€์ดํ•ด์•ผํ•˜๋ฏ€๋กœ 2 a b์— ๋Œ€ํ•œ ์ž…๋ ฅ์ด ์™”์„๋•Œ a ๊ตฌ๊ฐ„์—์„œ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ด์„œ ์ด๋™ํ•  ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“  ๊ตฌ๊ฐ„์— ๋Œ€ํ•ด ํƒ์ƒ‰ํ•˜๋ฉด์„œ ์ด๋™ํ•  ์ˆ˜ ์žˆ๋Š” ๊ตฌ๊ฐ„์„ ๊ธฐ์ค€์œผ๋กœ ๋‹ค์‹œ BFS๋ฅผ ์ง„ํ–‰ํ•˜์—ฌ ๊ฒฐ๊ตญ b ๊ตฌ๊ฐ„์ด ๋‚˜์˜ค๋Š”์ง€์— ๋Œ€ํ•œ ์—ฌ๋ถ€๋งŒ ํ™•์ธํ•˜๋ฉด ๋œ๋‹ค.

๊ตฌ๊ฐ„์˜ ์ˆ˜๋ฅผ N์ด๋ผ ํ•˜๊ณ , 2 a b๋ผ๋Š” ์ฟผ๋ฆฌ๊ฐ€ ์˜ค๋Š” ๊ฒฝ์šฐ๋ฅผ M์ด๋ผ ํ• ๋•Œ, O(N*M) (N+M <=100)์ด๋ฏ€๋กœ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค.

 

#include <iostream>
#include <vector>
#include <algorithm>
#include <queue>
#include <unordered_map>
using namespace std;
int N;
vector<pair<int,int > >v;
int main() {
    cin>>N;
    for(int i=0; i<N; i++) {
        int a, b, c; cin>>a>>b>>c;
        if(a == 1) {
            v.push_back(make_pair(b, c));
        }else if(a == 2) {
            queue<int>q;
            int vis[101]={0};
            q.push(b-1);
            vis[b-1] = 1;
            while(!q.empty()) {
                int cur = q.front(); q.pop();
                for(int i=0; i<v.size(); i++) {
                   if((v[i].first < v[cur].first && v[cur].first < v[i].second) || (v[i].first < v[cur].second && v[cur].second < v[i].second)) {
                        if(vis[i] == 0) {
                            vis[i] = 1;
                            q.push(i);
                        }
                    }
                }
            }
            if(vis[c-1] == 1) cout<<"1\n";
            else cout<<"0\n";
        }
    }
}