티스토리 뷰
728x90
문제링크
https://www.acmicpc.net/problem/6118
시작지점인 1번에서 가장 멀리있는 지점의 거리와 같은 거리를 갖는 지점중 가장 낮은 번호를 갖는 지점 그리고 같은 거리를 갖는 지점의 개수를 출력하는 문제입니다.
문제에서 길은 양방향으로 취급하기 때문에 인접행렬 형식으로 길 정보를 저장하였습니다.
다익스트라 알고리즘을 활용하였고 모든 길은 가중치가 동일하기 때문에 가중치를 따로 저장하지 않았습니다.
다익스트라 알고리즘으로 1번 시작위치에서 모든 지점까지 가는 길이를 각각 구하고 마지막에 정렬을 통해 가장 먼 거리를 구합니다.
마지막에 순차탐색으로 각 지점까지의 거리와 가장먼거리를 비교해서 가장 먼저 같은 위치의 번호, 같은 위치의 개수를 구하고 정답을 출력하였습니다.
#include <iostream>
#include <algorithm>
#include <math.h>
#include <string>
#include <queue>
using namespace std;
#define MAX_M 50001
#define MAX_N 20001
#define INF 987654321
//typedef struct NODE {
// int weight;
// int end;
//};
vector<int> edge[MAX_M];
int dist[MAX_N];
int start_node, N, M;
//int index[4][2] = { {1,0}, {0,1}, {-1,0}, {0,-1} };//아래 오른쪽 위 왼쪽 순서대로
void dijkstra() {
priority_queue<pair<int , int>> pq;
pq.push({ 0, start_node });
int now_node;
while (pq.empty() == false) {
now_node = pq.top().second;
pq.pop();
for (int i = 0; i < edge[now_node].size(); i++) {
int new_value = dist[now_node] + 1;
int before_value = dist[edge[now_node][i]];
if (new_value < before_value) {
dist[edge[now_node][i]] = new_value;
pq.push({-1*new_value, edge[now_node][i] });
}
}
}
}
bool compare(pair<int , int> a, pair<int,int> b) {
return a.second < b.second;
}
void debug() {
}
void clear() {
}
int main()
{
int max_value;
scanf("%d %d", &N, &M);
start_node = 1;
int start, end, weight;
for (int i = 0; i < M; i++) {
scanf("%d %d", &start, &end);
edge[start].push_back(end);
edge[end].push_back(start);
}
for (int i = 1; i <= N; i++) {
dist[i] = INF;
}
dist[1] = 0;
dijkstra();
max_value = *max_element(dist + 1, dist + N);
int count = 0;
int idx;
for (int i = 1; i <= N; i++) {
if (dist[i] == max_value) {
count++;
if (count == 1)
idx = i;
}
}
printf("%d %d %d", idx, max_value, count);
}
'알고리즘' 카테고리의 다른 글
백준 9205 - 맥주 마시면서 걸어가기 (0) | 2020.02.09 |
---|---|
백준 2178 - 미로 탐색 (0) | 2020.02.09 |
백준 - 1012 유기농 배추 (0) | 2020.02.06 |
백준 2667번 - 단지번호붙이기 DFS풀이 (0) | 2020.02.04 |
백준 1652번 - 누울 자리를 찾아라 (0) | 2020.01.26 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- c언어 기초
- c언어강의
- 젠킨스 에이전트 연결
- 안드로이드
- 빌드 주기
- 깃 용량문제
- 알고리즘
- Jenkins
- refusing to run with root privileges
- 백준
- UHT
- Add Node
- 언리얼 사용자 정의 구조체
- Jenkins Build Periodically
- Connecting Jenkins
- 안드로이드 구글맵
- 유니티
- C++
- 깃 허브 오류 해결
- 언리얼
- 알고리즘기초
- Connecting Jenkins Agent
- 젠킨스
- 언리얼 빌드
- C언어기초
- 구글맵
- 언리얼 기초
- 유니티 직소퍼즐 구현
- dfs
- Unreal Header Tool
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함