목록그래프 이론 (61)
기록방
👉 문제링크 1976번: 여행 가자 동혁이는 친구들과 함께 여행을 가려고 한다. 한국에는 도시가 N개 있고 임의의 두 도시 사이에 길이 있을 수도, 없을 수도 있다. 동혁이의 여행 일정이 주어졌을 때, 이 여행 경로가 가능한 것인 www.acmicpc.net 🔸 문제 분석 🔸 N개의 도시 중 M개의 도시를 여행하고자 한다. 경로가 있어서 여행이 가능하면 YES, 불가능하면 NO를 출력한다. 🔸 문제 풀이 🔸 여행 하고자 하는 M개의 도시 간에 경로가 있는지 파악하는 쉬운 방법은 같은 집합에 있는지 확인하는 것이다. 분리 집합(Disjoint Set)으로 N개의 도시들의 집합을 나눈다. 여행 계획상의 도시들이 같은 집합에 있으면 경로가 존재한다는 뜻이다. 분리 집합이 아니라 BFS나 DFS로 Brute F..
👉 문제링크 1707번: 이분 그래프 입력은 여러 개의 테스트 케이스로 구성되어 있는데, 첫째 줄에 테스트 케이스의 개수 K가 주어진다. 각 테스트 케이스의 첫째 줄에는 그래프의 정점의 개수 V와 간선의 개수 E가 빈 칸을 사이에 www.acmicpc.net 🔸 문제 분석 🔸 무방향 그래프가 주어지면, 이분 그래프인지 아닌지 판별한다. 🔸 문제 풀이 🔸 그래프 탐색을 통해 각 노드가 서로 다른 집합에 속하는지 구분한다. DFS로 처음 방문한 노드에 한번은 A집합, 한번은 B집합으로 번갈아 가며 포함시킨다. 이미 방문한 노드인데, 같은 집합이면 이분 그래프가 아니다. 여러 개의 부분 그래프로 이루어 져있을 수 있으므로, 모든 노드에서 DFS를 시작해본다. 모든 탐색 이후 이분 그래프 판정 결과를 출력한다...
👉 문제링크 1005번: ACM Craft 첫째 줄에는 테스트케이스의 개수 T가 주어진다. 각 테스트 케이스는 다음과 같이 주어진다. 첫째 줄에 건물의 개수 N과 건물간의 건설순서 규칙의 총 개수 K이 주어진다. (건물의 번호는 1번부 www.acmicpc.net 🔸 문제 분석 🔸 앞선 건물들이 모두 지어져야 해당 건물을 지을 수 있게 되는 건물 순서 규칙이 존재한다. 건물은 동시에 여러 개를 지을 수 있다. 목표 건물을 짓는데 드는 최소 시간을 출력한다. 🔸 문제 풀이 🔸 건물이 지어지는 순서가 달라질 수 있는데 선행 작업이 존재하므로, 위상 정렬을 사용해서 풀이한다. 동시에 건물을 지었다고 할 때, 가장 오래 걸리는 건설 시간이 최소값이다. 따라서 최대값을 갱신해서 저장하기 위해 DP를 사용한다. 점..
👉 문제링크 18352번: 특정 거리의 도시 찾기 첫째 줄에 도시의 개수 N, 도로의 개수 M, 거리 정보 K, 출발 도시의 번호 X가 주어진다. (2 ≤ N ≤ 300,000, 1 ≤ M ≤ 1,000,000, 1 ≤ K ≤ 300,000, 1 ≤ X ≤ N) 둘째 줄부터 M개의 줄에 걸쳐서 두 개 www.acmicpc.net 🔸 문제 분석 🔸 N개의 도시와 도시 사이를 연결하는 M개의 단방향 도로가 존재한다. 도로 하나 당 1의 거리를 갖는다. X번 도시에서 시작해 최단거리가 정확히 X 거리만큼 떨어진 도시의 목록을 출력한다. 🔸 문제 풀이 🔸 하나의 노드에서 다른 모든 노드들의 최단 거리를 구해야 하므로 다익스트라 알고리즘을 사용한다. N은30만개인데, 우선순위 큐를 활용해 O(NlogN)으로 해결..
👉 문제링크 1647번: 도시 분할 계획 첫째 줄에 집의 개수 N, 길의 개수 M이 주어진다. N은 2이상 100,000이하인 정수이고, M은 1이상 1,000,000이하인 정수이다. 그 다음 줄부터 M줄에 걸쳐 길의 정보가 A B C 세 개의 정수로 주어지는데 A번 www.acmicpc.net 🔸 문제 분석 🔸 N개의 집과 M개의 집 사이를 연결하는 길이 있다. 서로 이어지지 않는 마을 2개를 만드려고 하는데, 각 마을 안에서는 집끼리 길이 연결되어 있어야 한다. 길의 유지비 합의 최소값을 출력한다. 🔸 문제 풀이 🔸 마을 안에서 집 사이에 길이 연결되어 있어야 하고, 그 가중치가 최소가 되어야 하므로, 두 개의 최소 신장 트리(MST) 가 만들어져야 한다. 여기서는 크루스칼(Kruskal) 알고리즘을..