본문 바로가기

DFS3

[BOJ] 백준 1007번: 벡터 매칭 https://www.acmicpc.net/problem/1007 1007번: 벡터 매칭 평면 상에 N개의 점이 찍혀있고, 그 점을 집합 P라고 하자. 집합 P의 벡터 매칭은 벡터의 집합인데, 모든 벡터는 집합 P의 한 점에서 시작해서, 또 다른 점에서 끝나는 벡터의 집합이다. 또, P에 속 www.acmicpc.net N개의 좌표점이 주어지고 (N은 짝수) N/2개의 벡터를 만들 때, 모든 벡터의 합이 최소가 되는 크기를 구하는 문제입니다. 20개의 벡터 쌍을 구하는 경우의 수는 20C2 + 18C2 +...+ 4C2 + 2C2 이므로 20! / 2^10 으로 다른 방법을 찾아봐야겠습니다. 2,432,902,008,176,640,000 / 1024 = 2,375,880,867,360,000 위의 벡터의.. 2020. 8. 11.
이분 매칭 이분매칭은 x -> y로 가는 y를 모든 x에 대하여 선택할 때 두개 이상의 x가 y로 매칭되지 않으면서 최대로 선택할 수 있는 알고리즘입니다. dfs와 bfs로 접근 가능하며 BFS는 잘 알려진 네트워크 플로우가 속합니다. 본 글에서는 DFS를 사용하여 경우의 수를 찾아보겠습니다. 이분 매칭의 메인 아이디어는 모든 x에 대하여 선택 가능한 y를 찾아 가면서, 1. x가 탐색 중 만난 y가 이전에 다른 x에게 선택되어 지지 않았거나, 2. x가 y를 선택할 때, y를 선택했던 x가 다른 y를 선택할 수 있으면, (즉, {x,y} 상태에서, {x,y}, {x,y} 쌍이 구성될 수 있다면) 이 외의 경우는 x의 짝은 존재 하지 않는다. 현재 탐색하고자 하는 x 는 쌍을 구성할 수 있습니다. 두개의 배열을 선.. 2020. 6. 25.
[BOJ] 백준 16491번: 대피소 찾기 CCW를 이용한 선분 교차 판별 알고리즘을 통해 DFS 탐색하는 문제 #include #include #include #include #include using namespace std; typedef pair pii; int n; int rsy[101] = { 0, }; // 같은 y좌표를 갖는 로봇 int dsy[101] = { 0, }; // 같은 y 좌표를 갖는 대피소 pii pr[101]; pii pd[101]; int tmp[101]; bool visit[101]; int ccw(int x1, int y1, int x2, int y2, int x3, int y3) { int left = x1 * y2 + x2 * y3 + x3 * y1; int right = x1 * y3 + x3 * y2 +.. 2020. 6. 19.