๋ฐฑ์ค 16965
๋ฌธ์
์ ์ฒด ์ฟผ๋ฆฌ์ ์(๊ตฌ๊ฐ์ ์ต๋ ์)๊ฐ 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";
}
}
}