[BOJ 11657] λ°±μ€€ νƒ€μž„λ¨Έμ‹  - C++ 풀이

2023. 9. 6. 11:52Β·πŸ–₯️ Study Note/Coding Test

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

문제

N개의 λ„μ‹œκ°€ μžˆλ‹€. 그리고 ν•œ λ„μ‹œμ—μ„œ μΆœλ°œν•˜μ—¬ λ‹€λ₯Έ λ„μ‹œμ— λ„μ°©ν•˜λŠ” λ²„μŠ€κ°€ M개 μžˆλ‹€. 각 λ²„μŠ€λŠ” A, B, C둜 λ‚˜νƒ€λ‚Ό 수 μžˆλŠ”λ°, AλŠ” μ‹œμž‘λ„μ‹œ, BλŠ” λ„μ°©λ„μ‹œ, CλŠ” λ²„μŠ€λ₯Ό 타고 μ΄λ™ν•˜λŠ”λ° κ±Έλ¦¬λŠ” μ‹œκ°„μ΄λ‹€. μ‹œκ°„ Cκ°€ μ–‘μˆ˜κ°€ μ•„λ‹Œ κ²½μš°κ°€ μžˆλ‹€. C = 0인 κ²½μš°λŠ” μˆœκ°„ 이동을 ν•˜λŠ” 경우, C < 0인 κ²½μš°λŠ” νƒ€μž„λ¨Έμ‹ μœΌλ‘œ μ‹œκ°„μ„ λ˜λŒμ•„κ°€λŠ” κ²½μš°μ΄λ‹€.

1번 λ„μ‹œμ—μ„œ μΆœλ°œν•΄μ„œ λ‚˜λ¨Έμ§€ λ„μ‹œλ‘œ κ°€λŠ” κ°€μž₯ λΉ λ₯Έ μ‹œκ°„μ„ κ΅¬ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•˜μ‹œμ˜€.

λ‚΄ μ½”λ“œ

λ²¨λ§Œν¬λ“œ μ΅œλ‹¨ 거리 μ•Œκ³ λ¦¬μ¦˜μ„ κ³΅λΆ€ν•˜κ³  예제λ₯Ό ν’€μ–΄λ΄€λ‹€.

참고둜 costsλ₯Ό long long으둜 λ‘μ–΄μ•Όν•˜λŠ” μ΄μœ λŠ” λ²„μŠ€ λ…Έμ„ μ˜ μ΅œλŒ€ 개수 500 -1 * κ°„μ„ μ˜ 개수 6,000번 연산을 μ§„ν–‰ν•˜λŠ” 데닀가 μ΅œλŒ€ κ°„μ„  λΉ„μš© μ ˆλŒ€κ°’μ΄ 10,000이기 λ•Œλ¬Έμ— μ΅œλŒ€ λΉ„μš©μ΄ μ—„μ²­ 컀질 수 있기 λ•Œλ¬Έμ΄λ‹€. 같은 이유둜 MAX 값을 μΆ©λΆ„νžˆ 크게 두지 μ•ŠλŠ”λ‹€λ©΄ λ¬Έμ œκ°€ 생길 수 μžˆλ‹€.

#include <vector>
#include <iostream>
#include <algorithm>

#define MAX 9'999'999

using namespace std;

struct Edge
{
	int from = 0;
	int to = 0;
	int cost = MAX;
};

int main()
{
	int start = 1;
	int node, edge;
	cin >> node >> edge;

	vector<Edge> edges(edge);
	vector<long long> costs(node + 1, MAX);

	// 자기 μžμ‹ μœΌλ‘œ κ°€λŠ” λΉ„μš©μ€ 0
	costs[start] = 0;

	// κ°„μ„  μž…λ ₯
	for (int i = 0; i < edge; ++i)
	{
		int a, b, v;

		cin >> a >> b >> v;

		edges[i].from = a;
		edges[i].to = b;
		edges[i].cost = v;
	}

	// λ²¨λ§Œν¬λ“œ
	// 1. n-1번 κ°„μ„ λ§ˆλ‹€ μ΅œμ†Œ λΉ„μš©μ„ κ΅¬ν•œλ‹€
	for (int n = 1; n < node; ++n)
	{
		for (int e = 0; e < edge; ++e)
		{
			// κ°„μ„ μ˜ μ‹œμž‘ 지점이 start λ…Έλ“œμ™€ μ—°κ²°λ˜μ–΄ μžˆμ§€ μ•Šλ‹€λ©΄ continue;
			if (costs[edges[e].from] == MAX)
				continue;

			// ν˜„μž¬ 간선을 거쳐 κ°€λŠ” 것이 더 λΉ λ₯΄λ‹€λ©΄ κ°±μ‹ 
			costs[edges[e].to] = min(costs[edges[e].to], costs[edges[e].from] + edges[e].cost);
		}
	}

	// 2. ν•œλ²ˆ 더 갱신을 μ‹œλ„. λ§Œμ•½ κ°±μ‹  λœλ‹€λ©΄ 음수 κ°„μ„  μˆœν™˜μ΄ λ°œμƒν•œ κ²ƒμ΄λ―€λ‘œ -1을 좜λ ₯
	for (int e = 0; e < edge; ++e)
	{
		// κ°„μ„ μ˜ μ‹œμž‘ 지점이 start λ…Έλ“œμ™€ μ—°κ²°λ˜μ–΄ μžˆμ§€ μ•Šλ‹€λ©΄ continue;
		if (costs[edges[e].from] == MAX)
			continue;

		// ν˜„μž¬ 간선을 거쳐 κ°€λŠ” 것이 더 λΉ λ₯΄λ‹€λ©΄ κ°±μ‹ 
		if (costs[edges[e].to] > costs[edges[e].from] + edges[e].cost)
		{
			cout << -1 << endl;
			return 0;
		}
	}

	// κ²°κ³Ό 좜λ ₯
	for (int n = 2; n <= node; ++n)
	{
		if (costs[n] == MAX) cout << -1 << endl;
		else cout << costs[n] << endl;
	}
	return 0;
}
μ €μž‘μžν‘œμ‹œ λΉ„μ˜λ¦¬ λ³€κ²½κΈˆμ§€ (μƒˆμ°½μ—΄λ¦Ό)

'πŸ–₯️ Study Note > Coding Test' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

[ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€]level.3 - μ–‘κ³Ό λŠ‘λŒ€ (C++)  (0) 2023.09.14
[ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€]level.3 - 미둜 νƒˆμΆœ λͺ…λ Ήμ–΄ (C++)  (0) 2023.09.07
[ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€]level.3 - μˆœμœ„ (C++)  (0) 2023.09.05
[ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€]level.3 - ν•©μŠΉ νƒμ‹œ μš”κΈˆ (C++)  (0) 2023.09.05
[ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€]level.2 - 이λͺ¨ν‹°μ½˜ 할인 행사(C++)  (1) 2023.08.28
'πŸ–₯️ Study Note/Coding Test' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€
  • [ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€]level.3 - μ–‘κ³Ό λŠ‘λŒ€ (C++)
  • [ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€]level.3 - 미둜 νƒˆμΆœ λͺ…λ Ήμ–΄ (C++)
  • [ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€]level.3 - μˆœμœ„ (C++)
  • [ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€]level.3 - ν•©μŠΉ νƒμ‹œ μš”κΈˆ (C++)
Beankong_
Beankong_
μ£Όλ‹ˆμ–΄ ν΄λΌμ΄μ–ΈνŠΈ ν”„λ‘œκ·Έλž˜λ¨Έ 곡뢀 기둝
  • Beankong_
    Beankong's Devlog
    Beankong_
  • 전체
    였늘
    μ–΄μ œ
    • 전체 κΈ€ (146)
      • β›… Daily (0)
      • πŸ–₯️ Study Note (2)
        • C++ (1)
        • Unreal Engine (5)
        • Coding Test (123)
        • Design Patteren (5)
        • VCS (Git..) (1)
        • Server (1)
      • 🧭 Devlog (8)
        • μ˜€λ‹΅λ…ΈνŠΈ (4)
        • UE5 GameLift Server Test Project (1)
        • TIL (3)
  • λΈ”λ‘œκ·Έ 메뉴

    • 링크

    • 곡지사항

    • 인기 κΈ€

    • νƒœκ·Έ

      κ²Œμž„ ν”„λ‘œκ·Έλž˜λ°
      κ²Œμž„ 개발
      UnrealEngine
      κ²Œμž„ν”„λ‘œκ·Έλž˜λ°
      cpp
      ν”„λ£Œκ·Έλž˜λ¨ΈμŠ€
      ν—¬ν…Œμ΄μ»€
      κ²Œμž„ λͺ¨μž‘
      programmers
      μ•Œκ³ λ¦¬μ¦˜
      OnlineSubsystem
      μ½”λ”©ν…ŒμŠ€νŠΈ
      그리디(greedy)
      κ·Έλž˜ν”„ 순회
      ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€
      propertyaccess
      UnrealEngine5
      unrealengine build system
      unrealengine module
      μ΅œλ‹¨ 거리 μ•Œκ³ λ¦¬μ¦˜
    • 졜근 λŒ“κΈ€

    • 졜근 κΈ€

    • hELLOΒ· Designed Byμ •μƒμš°.v4.10.3
    Beankong_
    [BOJ 11657] λ°±μ€€ νƒ€μž„λ¨Έμ‹  - C++ 풀이
    μƒλ‹¨μœΌλ‘œ

    ν‹°μŠ€ν† λ¦¬νˆ΄λ°”