# Union-find # Disjoint-set
Union-find에 대한 개념을 어느정도 이해하고 푸는것을 추천드립니다...
상당히 어려웠던거 같은뎁...후.....
#include <iostream>
#define MAX 300001
using namespace std;
int n,m,a,b,uf[MAX];
bool tf[MAX],drink[MAX];
int find(int in)
{
if(uf[in]==in)
return in;
return uf[in]=find(uf[in]);
}
void merge(int a,int b)
{
uf[find(a)]=find(b);
}
int main()
{
scanf("%d%d",&n,&m);
for(int i=1;i<=m;i++)
uf[i]=i;
for(int i=1;i<=n;i++)
{
scanf("%d%d",&a,&b);
if (!tf[a])
{
tf[a] = true;
merge(a, b);
continue;
}
if (!tf[b])
{
tf[b] = true;
merge(b, a);
continue;
}
int x = find(a);
if (!tf[x])
{
tf[x] = true;
merge(x, a);
merge(a, b);
continue;
}
x = find(b);
if (!tf[x])
{
tf[x] = true;
merge(x, b);
merge(b, a);
continue;
}
drink[i] = true;
}
for(int i=1;i<=n;i++)
{
if(drink[i])
printf("SMECE\n");
else
printf("LADICA\n");
}
}'IT > BOJ' 카테고리의 다른 글
| 백준(BOJ) 3392 화성지도 *** (0) | 2018.06.22 |
|---|---|
| 백준(BOJ) 13547 수열과 쿼리5 *** (0) | 2018.06.22 |
| 백준(BOJ) 3079 입국심사 ** (0) | 2018.06.17 |
| 백준(BOJ) 15803 PLAYERJINAH’S BOTTLEGROUNDS * (0) | 2018.06.16 |
| 백준(BOJ) 15805 영우의 기숙사 청소 ** (0) | 2018.06.16 |