2016/09/27 2

상호 배타적 집합.(Disjoint-set)

설명 잘됨 : http://jinsolkim.kr/50194124086 n명의 사람들이 파티에 왔다고 하자. 레크리에이션 강사가 생일이 같은 사람들끼리 팀을 구성하라고 한다. 사람들이 서로 그룹을 만드는데, 생일이 같은 사람들 찾으면 둘은 한 그룹이 되고 또다른 사람들을 찾아나설것이다. 만약 다른 팀을 찾았는데 생일이 같으면 또 그룹이 합쳐질것이다. 이런것들을 표현하는 자료구조라고 보면 된다. 이를 구현하기 위해 3가지 연산이 필요하다. 1. 초기화, 2. 합치기, 3. 찾기. 따로 상호 배타적 집합으로 쓰이기보다는 최소 신장 트리 등 다른 자료구조의 안에 쓰인다고 한다. 아래 소스코드에 다 구현되있다. #include #include #include #include using namespace std;..

algorithm/theory 2016.09.27

acmicpc.net 5052(트라이), 9250(아호 코라식)

https://www.acmicpc.net/problem/5052 트라이를 이용하면 된다. 전화번호 목록을 받아서 긴 길이->짧은 길이 순으로 정렬한다. 그 후에 insert를 하기전에 이 전화번호가 다른곳에 포함되있는지 확인한다.#include #include #include #include #include #include #include #include using namespace std; const int ALPHABETS = 10; int toNumber(char ch) { return ch - '0'; } struct LinkedListNode { int elem; LinkedListNode* next; LinkedListNode(int _elem, LinkedListNode* _next) : ..