동빈이는 1번 헛간으로부터 최단 거리가 가장 먼 헛간에 숨는다. 동빈이가 숨을 헛간의 번호를 출력하는 프로그램을 잣성하세요.
#include <iostream>
#include <queue>
#include <vector>
#include <algorithm>
using namespace std;
static int N, M, dist[20001];
static vector<int> place[20001];
void dijkstra() {
priority_queue<pair<int, int>, vector<pair<int, int>>, greater<pair<int, int>>> pq;
pq.push({1, 0}); // 시작지점과 거리를 넣어준다.
dist[1] = 0; // 시작지점의 거리를 초기화한다.
while(!pq.empty()) {
int curVertex = pq.top().first, cost = pq.top().second;
pq.pop();
// 기록된 최소 거리보다 cost가 크다면 갱신 불필요함.
if (dist[curVertex] < cost) continue;
for (const int& itr : place[curVertex])
if (dist[itr] > cost + 1) {
dist[itr] = cost + 1;
pq.push({itr, cost + 1});
}
}
}
int main() {
ios::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr);
cin >> N >> M;
for (int i = 0; i < M; ++i) {
int s, e; cin >> s >> e;
place[s].push_back(e);
place[e].push_back(s);
}
fill(dist + 1, dist + N + 1, 1e9);
dijkstra();
// 최종적으로 답을 구하는 과정
auto itr = max_element(dist + 1, dist + N + 1);
int answerDist = *itr, hidePlace = itr - dist;
int dupCount = 0;
for (int i = 1; i <= N; ++i)
if (place[i] == answerDist) dupCount++;
cout << hidePlace << ' ' << answerDist << ' ' << dupCount << '\n';
}
max_element()
함수는 컨테이너에서 최대값을 찾은 뒤 해당 지점의 iterator를 반환한다.answerDIst
는 반환된 반복자의 포인터다.hidePlace
, 반복자의 인덱스 번호를 알기 위해서는 begin()에서 빼준다.6 7
3 6
4 3
3 2
1 3
1 2
2 4
5 2
4 2 3