TIL
2023.09.17 (SUN)
그래프 - 인접 리스트
/*
* Title : 상근이의 여행
* Link : https://www.acmicpc.net/problem/9372
*/
import java.util.*;
import java.io.*;
public class Main {
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
int result[];
// input
int tc = Integer.parseInt(br.readLine());
result = new int[tc];
// each TestCase
for (int t = 0; t < tc; t++) {
int answer = Integer.MAX_VALUE;
st = new StringTokenizer(br.readLine());
int N = Integer.parseInt(st.nextToken());
int M = Integer.parseInt(st.nextToken());
// input & 인접 리스트
ArrayList<ArrayList<Integer>> graph = new ArrayList<>();
for (int i = 0; i <= N; i++)
graph.add(new ArrayList<>()); // 각 노드 별 리스트를 만든다.
for (int i = 0; i < M; i++) { // make graph
st = new StringTokenizer(br.readLine());
int x = Integer.parseInt(st.nextToken());
int y = Integer.parseInt(st.nextToken());
putEdge(graph, x, y);
}
for (int i = 0; i < N ; i++) {
int check = checkEdge(graph, i);
if (check < answer) {
answer = check;
}
}
result[t] = answer;
}
for (int r:result)
System.out.println(r);
}
public static void putEdge(ArrayList<ArrayList<Integer>> graph, int x, int y) {
graph.get(x).add(y);
graph.get(y).add(x);
}
public static int checkEdge(ArrayList<ArrayList<Integer>> graph, int x) {
}
}
그래프를 표현할 때, 가장 효율적인 방법인 듯
신장 트리 / 최소 신장 트리 (MST)
신장 트리란 : 그래프의 모든 정점을 사이클 없이 잇는 트리
최소 신장 트리 : 신장 트리에서 간선의 가중치의 합이 최소가 되는 트리
MST는 내일 다루도록 해보고, 오늘은 신장트리를 구현하였다.
입력된 그래프가 항상 연결 그래프이면 정점 - 1가 정답이다.