Study/Problem Solving
[BOJ_1325] 효율적인 해킹
monitor
2024. 1. 5. 20:06
설명
같은 로직으로 C++으로 제출하면 맞는 정답이다.
자바의 경우 로직은 같으나 해당 코드로 통과되지는 않는다.
코드
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.*;
public class Main {
static boolean [] visited;
static int max;
static int[] ans;
static List<Integer>[] graph;
public static void main(String[] args) throws Exception{
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringTokenizer tk = new StringTokenizer(in.readLine()," ");
int N = Integer.parseInt(tk.nextToken());
int M = Integer.parseInt(tk.nextToken());
graph = new ArrayList[N + 1];
visited = new boolean[N + 1];
for (int i = 0; i <= N; i++){
graph[i] = new ArrayList<>();
}
max = -1;
ans = new int[N + 1];
String[] inputs = new String[2];
for (int i = 0; i < M; i++){
inputs = in.readLine().split(" ");
graph[Integer.parseInt(inputs[0])].add(Integer.parseInt(inputs[1]));
}
for (int i = 1; i <= N; i++){
visited = new boolean[N + 1];
dfs(i);
}
for (int i = 1; i <= N; i++)
{
max = Math.max(max, ans[i]);
}
StringBuffer sb = new StringBuffer();
for (int i = 1; i <= N; i++)
{
if (max == ans[i])
sb.append(i + " ");
}
bw.write(sb.toString());
bw.flush();
bw.close();
}
private static void dfs(int index){
visited[index] = true;
ans[index]++;
for(int idx : graph[index]){
if(!visited[idx]){
visited[idx] = true;
dfs(idx);
}
}
}
}
1325번: 효율적인 해킹
첫째 줄에, N과 M이 들어온다. N은 10,000보다 작거나 같은 자연수, M은 100,000보다 작거나 같은 자연수이다. 둘째 줄부터 M개의 줄에 신뢰하는 관계가 A B와 같은 형식으로 들어오며, "A가 B를 신뢰한
www.acmicpc.net