dfs를 사용했다.
import java.util.*;
import java.io.*;
public class Main{
static ArrayList<Integer[]> graph[];
static boolean visited[];
static int max = 0;
static int findNode = 1 ;
public static void main(String[] args) throws IOException{
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb=new StringBuilder();
StringTokenizer st;
int n=Integer.parseInt(br.readLine());
graph=new ArrayList[n+1];
for(int i=1;i<graph.length;i++)
graph[i]=new ArrayList<>();
for(int i=1;i<=n;i++) {
String line[]=br.readLine().split(" ");
int now=Integer.parseInt(line[0]);
for(int j=1;j<line.length;j+=2) {
if(j==line.length-1) break;
int node=Integer.parseInt(line[j]);
int cost=Integer.parseInt(line[j+1]);
graph[now].add(new Integer[] {node,cost} );
}
}
visited=new boolean[n+1];
dfs(1,0);
Arrays.fill(visited,false);
max = 0;
dfs(findNode,0);
System.out.println(max);
}
public static void dfs(int node,int sum) {
visited[node]=true;
if(sum>max) {
max=sum;
findNode = node;
}
for(Integer temp[]:graph[node]) {
int next=temp[0];
int cost = temp[1];
if(!visited[next]) {
dfs(next,sum+cost);
}
}
}
}
dfs 수행 조건을 잘못 적어서 2번 틀렸다.
틀리고 나서
overflow check를 했는데 최대 10억으로 int 오버플로우는 나지 않을 것으로 예상.
dfs 할 때 수행 구문을 이상하게 적은 것이 원인이었다.
이 문제는 1967번 문제와 거의 유사한데 n이 그 문제보다 10배 크므로
시간 복잡도를 줄이는 데 어떠한 방법을 써야하는지에 대한 고찰을 해야하는 문제였다.
하루에 백준 1문제 이상 푸는 것을 목표로 하고있다.
https://solved.ac/profile/anwlro0212