https://ukyonge.tistory.com/17?category=870877

 

#백준_1167 트리의 지름 - Java

유형 : 트리 # 트리에서 탐색은 dfs,bfs가 많이 사용됨. 맨 처음에는 배열로 접근하여 dfs로 문제를 풀었으나, 메모리 초과가 나옴. 대신 인접리스트를 사용하여 문제를 해결하였더니 메모리 제한은 뜨지 않았음...

ukyonge.tistory.com

 

 

#위와 같은 방식으로 접근하여 풀 수있는 문제. 개인적으로는 1967번 문제를 먼저 풀고, 1167번 문제를 푸는 것을 추천.

지름을 구하는 법을 알지 못하면 한참동안 헤매는 문제.

 

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

package bj;

 

import java.awt.Point;

import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStreamReader;

import java.util.ArrayList;

import java.util.StringTokenizer;

 

public class p1967 {

    static ArrayList<Point>[] arrList;

    static boolean visit[];

    static Point maxP;

    static int max=0;

    public static void main(String[] args) throws NumberFormatException, IOException {

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        

        int n = Integer.parseInt(br.readLine());

        StringTokenizer st;

        arrList = new ArrayList[n+1];

        visit = new boolean[n+1];

        for(int i=0; i<n+1; i++) {

            arrList[i] = new ArrayList<>();

        }

        for(int i=1; i<n; i++) {

            st = new StringTokenizer(br.readLine());

            int a = Integer.parseInt(st.nextToken());

            int b = Integer.parseInt(st.nextToken());

            int val = Integer.parseInt(st.nextToken());

            arrList[a].add(new Point(b,val));

            arrList[b].add(new Point(a,val));

        }

        

        Point tmp = dfs(arrList[1].get(0), 0);

        max = 0;

        maxP = null;

        visit = new boolean[n+1];

        

        dfs(tmp, 0);

        System.out.println(max);

    }

    

    public static Point dfs(Point p, int val) {

        visit[p.x] = true;

        

        for(Point tmp : arrList[p.x])

            if(!visit[tmp.x])

                dfs(tmp, val+tmp.y);

        

        if(max < val) {

            max = val;

            maxP = p;

        }

        

        return maxP;

    }

}

 

Colored by Color Scripter

cs

 

'백준' 카테고리의 다른 글

#백준_11728 배열 합치기 - Java  (0) 2020.01.11
#백준_2146 다리 만들기 - Java  (0) 2020.01.09
#백준_1167 트리의 지름 - Java  (0) 2020.01.09
#백준_1406 에디터  (0) 2020.01.03
#백준_11652 카드  (0) 2020.01.01

+ Recent posts