Notice
Recent Posts
Recent Comments
Link
«   2024/05   »
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
Tags
more
Archives
Today
Total
관리 메뉴

혼종 꼬지마루

[백준] 1967 - 트리의 지름 본문

Algorithms/BFS

[백준] 1967 - 트리의 지름

꼬지마루 2018. 8. 27. 14:39

이 문제는 BFS에 넣어두긴 했지만 트리 구조를 인접행렬로 만드는게 더 중요한 문제


1. 입력되는 간선의 정보와 가중치를 map과 w배열을 만들어 저장


2. 트리의 마지막 노드에서 출발하는 것이 가장 큰 값을 나타내게 되기 때문에 map에서 갈 수 있는 정점의 수가 1개인 곳만 찾아서 bfs 탐색


결과적으로는 맞았지만 1832ms나 걸렸기 때문에 효율적이라고는 생각되지 않는코드


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
#include <iostream>
#define MX 10002
using namespace std;
 
int map[MX][1000], w[MX][1000], q[MX];
int N, dab;
 
void bfs(int snode)
{
    int check[MX] = { };
    int st, ed, inode, nnode, tmp = 0;
    st = ed = -1;
    q[++st] = snode; check[snode] = 1;
    while (st != ed)
    {
        inode = q[++ed];
        if (check[inode] > tmp) tmp = check[inode];
        for (int i = 1; i<=map[inode][0]; i++)
        {
            nnode = map[inode][i];
            if (nnode == || check[nnode]) continue;
            q[++st] = nnode; check[nnode] = check[inode] + w[inode][i];
        }
    }
    if (tmp > dab) dab = tmp;
}
 
int main(void)
{
    cin >> N;
 
    for (int i = 1; i < N; i++)
    {
        int p, s, c;
        cin >> p >> s >> c;
        map[p][0]++; map[p][map[p][0]] = s; w[p][map[p][0]] = c;
        map[s][0]++; map[s][1= p; w[s][1= c;
    }
 
    for (int i = 1; i <= N; i++)
        if (map[i][0== 1) bfs(i);
    cout << dab - << endl;
    return 0;
}
cs

'Algorithms > BFS' 카테고리의 다른 글

[백준] 1938 - 통나무 옮기기  (0) 2018.08.30
[백준] 5022 - 연결  (0) 2018.08.30
[백준] 9328 - 열쇠  (0) 2018.08.30
[백준] 5213 - 과외맨  (0) 2018.08.30
[백준] 1261 - 알고스팟  (0) 2018.08.30