백준 1595번, 북쪽나라의 도로 풀이
2020. 11. 19. 19:14ㆍProblem Solving/백준
문제
풀이
임의의 정점 $ v_{0} $에서 가장 먼 정점 $ v_{1} $을 DFS 또는 BFS로 찾아줍니다.
다시 정점 $ v_{1} $에서 가장 먼 정점 $ v_{2} $를 찾아줍니다.
도시 $ v_{1} $과 $ v_{2} $의 거리가 정답이 됩니다.
자료형에 유의해줘야하는데, int를 사용하면 12%에서, long long을 사용하면 100%에서 틀렸습니다.
unsigned long long 박으니 풀렸습니다.
소스코드
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;
typedef pair<ull, ull> pull;
typedef vector<int> vi;
typedef vector<ll> vl;
ull vis[10001];
vector<pull> graph[10001];
void dfs(ull a, ull c) {
for (const auto &nxt : graph[a]) {
if (vis[nxt.first]) continue;
vis[nxt.first] = c + nxt.second;
dfs(nxt.first, c + nxt.second);
}
}
int main() {
ios_base::sync_with_stdio(0);
cin.tie(nullptr);
cout.tie(nullptr);
vector<pair<ull, pull>> vec;
string str;
ull v = 0;
while (getline(cin, str)) {
if (str.empty() || str == "0") break;
stringstream ss(str);
ll a, b, c; ss >> a >> b >> c;
v = a;
graph[a].emplace_back(b, c);
graph[b].emplace_back(a, c);
}
ull mx = 0;
for (ull i = 1; i <= 10000; i++) vis[i] = 0;
vis[v] = 0;
dfs(v, 0);
for (ull i = 1; i <= 10000; i++) {
if (mx < vis[i]) {
mx = vis[i];
v = i;
}
}
for (ull i = 1; i <= 10000; i++) vis[i] = 0;
vis[v] = 0;
mx = 0;
dfs(v, 0);
for (ull i = 1; i <= 10000; i++) mx = max(mx, vis[i]);
cout << mx;
}
'Problem Solving > 백준' 카테고리의 다른 글
백준 16172번, 나는 친구가 적다 (Large) 풀이 (0) | 2020.11.22 |
---|---|
백준 1445번, 일요일 아침의 데이트 풀이 (0) | 2020.11.21 |
백준 1484번, 다이어트 풀이 (0) | 2020.11.17 |
백준 1253번, 좋다 풀이 (1) | 2020.11.17 |
백준 1240번, 노드사이의 거리 풀이 (0) | 2020.11.15 |