728x90
중량제한
https://www.acmicpc.net/problem/1939
<코드>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 | #include <stdio.h> #include <vector> #include <algorithm> using namespace std; vector<pair<int, int>> bridge[100010]; int visit[100010] = {}; bool finalmap(int vertx, int weight,int finalvertx){ bool result = false; if (finalvertx == vertx) return true; for (int i = 0; i < bridge[vertx].size(); i++){ if (visit[bridge[vertx][i].first] == 0 && weight <= bridge[vertx][i].second){ visit[bridge[vertx][i].first] = 1; result = finalmap(bridge[vertx][i].first, weight, finalvertx); if (result) return true; } } return result; } int main(void){ int N, M; //처음int는 다음 정점 마지막 int 값어치 int weight[100010]; int result; int start, end; scanf("%d %d", &N, &M); for (int i = 0; i < M; i++){ int A, B, C; scanf("%d %d %d ", &A, &B, &C); bridge[A].push_back(make_pair(B, C)); bridge[B].push_back(make_pair(A, C)); weight[i] = C; } scanf("%d %d", &start, &end); sort(weight, weight + M); int left = 0, right = M - 1; while (left <= right){ visit[start] = 1; int mid = (left + right) / 2; if (finalmap(start, weight[mid], end)) { result = weight[mid]; left = mid + 1; } else right = mid - 1; for (int i = 1; i <= M; i++) visit[i] = 0; } printf("%d\n", result); return 0; } | cs |
<문제 푼 요령>
1. 이분탐색을 이용하였다.
2. 문제 -> 정답을 구하는 과정이 아닌 정답을 유추 -> 문제에 대입으로 풀었다 이 정답을 유추하는 과정에서 이분탐색을 사용하였다.
3. 다리의 중량제한 값을 따로 배열을 만든 뒤 정렬한 뒤에 이 중에서 분명 답이 있기 때문에 이분탐색으로 최적의 값을 구하였다.
4. 각각의 정답 -> 문제에 대해서는 시작점에서 유추한 중량을 가진 트럭이 출발해서 끝점까지 도착할 수 있는지 없는지만 보았다.
5. 여기서 도착할 수 있다면 이 도착할 수 있는 값을 저장해 놓고 이 중량보다 위의값을 다시 검색하는 순서로 진행하였다.
6. 즉 최종값에서 가장 중량이 높으면서 출발점에서 끝점까지 도착만 할 수 있다면 그 값이 정답이 되는것이다.
728x90
'Algorithm > 이분탐색' 카테고리의 다른 글
[백준][10815번][이분탐색] 숫자 카드 (0) | 2016.04.07 |
---|---|
[백준][1920번][이분탐색] 수 찾기 (0) | 2016.04.07 |
[백준][3079번][이분탐색] 입국심사 (0) | 2016.04.06 |
[백준][10816번][이분탐색] 숫자 카드 2 (0) | 2016.04.06 |
[ALGOSPOT][이분탐색] DARPA (0) | 2016.04.05 |
댓글