혼종 꼬지마루
[백준] 1967 - 트리의 지름 본문
이 문제는 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] = { 0 }; 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 == 0 || 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 - 1 << 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 |