공지사항

  • 분류 전체보기 (19)
    • 공지 (1)
    • guide (3)
    • 풀이 포스팅 (15)
      • 강사진 (1)
      • general (1)
      • 1팀(일요일 22:00 ~) (2)
      • 2팀(수요일 15:00 ~) (0)
      • 3팀(목요일 20:00 ~) (11)

태그

최근 글

hELLO · Designed By 정상우.
raara

ps상아탑

풀이 포스팅/3팀(목요일 20:00 ~)

[백준 17833번] 홍익대학교 지하캠퍼스, C++ 풀이

2022. 11. 24. 14:43

 

https://www.acmicpc.net/problem/17833

 

17833번: 홍익대학교 지하캠퍼스

홍익대학교 서울 캠퍼스의 건물들은 정문부터 후문까지 연결되어 있지만 건물마다 연결되어 있는 층이 제각각이다. 예를 들어 정문인 R동의 3층으로 나오면 K동의 1층이 있고, L동의 8층으로 나

www.acmicpc.net

요약

 

지하 R층에서 지하 D층으로 이어지는 캠퍼스 모델을 설계한다.


1. 시작 지점 지하 R층과 도착지점 지하 D층이 주어지고, 사용할 수 있는 건물 모델들이 주어진다. 이때, 모델이 최종적으로 위치한 범위가 지하 1층부터 지하 N층을 만족한다면 자유롭게 건물을 배치할 수 있다.

 

2. 모델을 제작하는데 T의 시간이 걸리고, 건물을 좌우로 반전시켜 배치할 수 있으므로, 가중치가 T인 양방향 간선으로 생각할 수 있다. 건물을 범위 내에서 자유롭게 배치할 수 있으므로, 각 간선이 연결하는 두 정점은 $(E_{1} + j, E_{2} + j)   (0\leq j\leq N-H)$이다.

 

3. 위 그래프에서 다익스트라를 통해 정점 R에서 정점 D로 향하는 최단경로를 구한다. 

 

#include <bits/stdc++.h>
using namespace std;
typedef pair<long, int> pli;
const long long INF = 0x3f3f3f3f3f3f3f3fLL;

struct cmp {
	bool operator() (pli A, pli B) {
		return A.first > B.first;
	}
};

int N, R, D, M;
vector <pli> graph[2001];
long long dist[2001];

void Dijkstra(int start);

int main(void) {
	ios::sync_with_stdio(false);
	cin.tie(0);
	cin >> N >> R >> D >> M;
	for (int i = 0; i < M; i++) {
		int H, E1, E2;
		long long T;
		cin >> H >> T >> E1 >> E2;
		for (int j = 0; j <= N - H; j++) {
			graph[E1 + j].push_back({ T, E2 + j });
			graph[E2 + j].push_back({ T, E1 + j });
		}
	}
	Dijkstra(R);
	if (dist[D] == INF) cout << -1;
	else cout << dist[D];
	return 0;
}

void Dijkstra(int start) {
	for (int i = 1; i <= N; i++) dist[i] = INF;
	priority_queue <pli, vector<pli>, cmp> pq;
	dist[start] = 0;
	pq.push({ 0, start });
	while (pq.size()) {
		int now = pq.top().second;
		long long val = pq.top().first;
		pq.pop();
		if (dist[now] < val) continue;
		for (int i = 0; i < graph[now].size(); i++) {
			int next = graph[now][i].second;
			long long new_val = val + graph[now][i].first;
			if (dist[next] > new_val) {
				dist[next] = new_val;
				pq.push({ new_val, next });
			}
		}
	}
}

원글: https://int-p.tistory.com/11

 

[백준 17833번] 홍익대학교 지하캠퍼스, C++ 풀이

https://www.acmicpc.net/problem/17833 17833번: 홍익대학교 지하캠퍼스 홍익대학교 서울 캠퍼스의 건물들은 정문부터 후문까지 연결되어 있지만 건물마다 연결되어 있는 층이 제각각이다. 예를 들어 정문

int-p.tistory.com

 

'풀이 포스팅 > 3팀(목요일 20:00 ~)' 카테고리의 다른 글

[백준 14554번] The Other Way, C++ 풀이  (0) 2022.11.24
[백준 14611번] 월요병, C++ 풀이  (0) 2022.11.24
[백준 20046번] Road Reconstruction, C++ 풀이  (0) 2022.11.24
[백준 2423번] 전구를 켜라 / Switch the Lamp On, C++ 풀이  (0) 2022.11.24
[백준 13912번] 외계 생물, C++ 풀이  (0) 2022.10.08
    '풀이 포스팅/3팀(목요일 20:00 ~)' 카테고리의 다른 글
    • [백준 14554번] The Other Way, C++ 풀이
    • [백준 14611번] 월요병, C++ 풀이
    • [백준 20046번] Road Reconstruction, C++ 풀이
    • [백준 2423번] 전구를 켜라 / Switch the Lamp On, C++ 풀이
    raara
    raara

    티스토리툴바