# 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 |