원본 : https://www.acmicpc.net/problem/2606
2606번: 바이러스
첫째 줄에는 컴퓨터의 수가 주어진다. 컴퓨터의 수는 100 이하이고 각 컴퓨터에는 1번 부터 차례대로 번호가 매겨진다. 둘째 줄에는 네트워크 상에서 직접 연결되어 있는 컴퓨터 쌍의 수가 주어
www.acmicpc.net
풀이
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.ArrayList;
import java.util.Arrays;
public class Main {
public static BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
public static BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(System.out));
public static ArrayList<Integer> arr[];
public static boolean visited[];
public static int cnt = 0;
public static void main(String[] args) throws Exception {
int n = Integer.parseInt(reader.readLine());
int m = Integer.parseInt(reader.readLine());
arr = new ArrayList[n + 1];
visited = new boolean[n + 1];
for (int i = 1; i <= n; i++) {
arr[i] = new ArrayList<Integer>();
}
for (int i = 0; i < m; i++) {
int xy[] = Arrays.stream(reader.readLine().split(" ")).mapToInt(Integer::parseInt).toArray();
int x = xy[0];
int y = xy[1];
arr[x].add(y);
arr[y].add(x);
}
for (int i = 1; i <= n; i++) {
arr[i].sort(null);
visited[i] = false;
}
dfs(1);
writer.write(cnt - 1 + "");
writer.flush();
}
public static void dfs(int v) throws IOException {
if (visited[v] == true) {
return;
} else {
cnt++;
visited[v] = true;
for (int i = 0; i < arr[v].size(); i++) {
dfs(arr[v].get(i));
}
}
}
}
댓글 영역