본문 바로가기

BOJ 알고리즘 (패캠)/그래프

(8)
1774번: 우주신과의 교감 (그래프, MST, 크루스칼) - Fastcampus www.acmicpc.net/problem/1774 1774번: 우주신과의 교감 (1,1) (3,1) (2,3) (4,3) 이렇게 우주신들과 황선자씨의 좌표가 주어졌고 1번하고 4번이 연결되어 있다. 그렇다면 1번하고 2번을 잇는 통로를 만들고 3번하고 4번을 잇는 통로를 만들면 신들과 선자씨끼 www.acmicpc.net import math def find(i): if parent[i] != i: parent[i] = find(parent[i]) return parent[i] def union(i, j): i = find(i) j = find(j) if i != j: parent[i] = j N, M = map(int, input().split()) loc = [(0, 0)] + [tuple(map(..
5719번: 거의최단경로 (그래프, 다익스트라) - Fastcampus www.acmicpc.net/problem/5719 5719번: 거의 최단 경로 입력은 여러 개의 테스트 케이스로 이루어져 있다. 각 테스트 케이스의 첫째 줄에는 장소의 수 N (2 ≤ N ≤ 500)과 도로의 수 M (1 ≤ M ≤ 104)가 주어진다. 장소는 0부터 N-1번까지 번호가 매겨져 있 www.acmicpc.net import sys import heapq import collections def dijkstra(N, start): qu = [] heapq.heappush(qu, (0, start)) dist = [float("inf")] * N dist[start] = 0 while qu: d, node = heapq.heappop(qu) if d > dist[node]: continue ..
10282번: 해킹 (그래프, 다익스트라) - Fastcampus www.acmicpc.net/problem/10282 10282번: 해킹 최흉최악의 해커 yum3이 네트워크 시설의 한 컴퓨터를 해킹했다! 이제 서로에 의존하는 컴퓨터들은 점차 하나둘 전염되기 시작한다. 어떤 컴퓨터 a가 다른 컴퓨터 b에 의존한다면, b가 감염되면 www.acmicpc.net import sys import heapq def dijkstra(N, start): qu = [] heapq.heappush(qu, (0, start)) dist = [float("inf")] * (N+1) dist[start] = 0 while qu: d, node = heapq.heappop(qu) if d > dist[node]: continue for w, e in graph[node]: nd = d + ..
1325번: 효율적인해킹 (그래프, BFS, DFS) - Fastcampus www.acmicpc.net/problem/1325 max_v: max_v = cnt ans = [i] elif cnt == max_v: ans.append(i) print(" ".join(map(str, ans)))
1012번: 유기농배추 (그래프, BFS, DFS) - Fastcampus www.acmicpc.net/problem/1012 1012번: 유기농 배추 차세대 영농인 한나는 강원도 고랭지에서 유기농 배추를 재배하기로 하였다. 농약을 쓰지 않고 배추를 재배하려면 배추를 해충으로부터 보호하는 것이 중요하기 때문에, 한나는 해충 방지에 � www.acmicpc.net from collections import deque def bfs(sx, sy): qu = deque([(sx, sy)]) while qu: x, y = qu.popleft() if not visited[x][y]: visited[x][y] = 1 for dx, dy in [(1, 0), (-1, 0), (0, 1), (0, -1)]: nx, ny = x + dx, y + dy if 0
2606번: 바이러스 (그래프, BFS, DFS) - Fastcampus www.acmicpc.net/problem/2606 2606번: 바이러스 첫째 줄에는 컴퓨터의 수가 주어진다. 컴퓨터의 수는 100 이하이고 각 컴퓨터에는 1번 부터 차례대로 번호가 매겨진다. 둘째 줄에는 네트워크 상에서 직접 연결되어 있는 컴퓨터 쌍의 수가 주어�� www.acmicpc.net from collections import deque # BFS-1: 큐에서 꺼내고 방문 마킹 def bfs(start): qu = deque([start]) visited = [0] * len(graph) cnt = 0 while qu: node = qu.popleft() if not visited[node]: visited[node] = 1 cnt += 1 # 로직 for e in graph[node]: qu..
1697번: 숨바꼭질 (그래프, BFS) - Fastcampus www.acmicpc.net/problem/1697 1697번: 숨바꼭질 수빈이는 동생과 숨바꼭질을 하고 있다. 수빈이는 현재 점 N(0 ≤ N ≤ 100,000)에 있고, 동생은 점 K(0 ≤ K ≤ 100,000)에 있다. 수빈이는 걷거나 순간이동을 할 수 있다. 만약, 수빈이의 위치가 X일 �� www.acmicpc.net from collections import deque def bfs(start, K): qu = deque([(start, 0)]) visited = [0] * 100001 while qu: x, sec = qu.popleft() if not visited[x]: visited[x] = 1 if x == K: return sec for e in (x-1, x+1, 2*x): if 0
1260번: DFS와 BFS (그래프, BFS, DFS) - Fastcampus www.acmicpc.net/problem/1260 1260번: DFS와 BFS 첫째 줄에 정점의 개수 N(1 ≤ N ≤ 1,000), 간선의 개수 M(1 ≤ M ≤ 10,000), 탐색을 시작할 정점의 번호 V가 주어진다. 다음 M개의 줄에는 간선이 연결하는 두 정점의 번호가 주어진다. 어떤 두 정점 사 www.acmicpc.net from collections import deque # BFS-1: 큐에서 꺼내고 방문 마킹 def bfs(start): queue = deque([start]) visited = [0] * len(graph) res = [] while queue: node = queue.popleft() if not visited[node]: visited[node] = 1 res.ap..