관리 메뉴

Partially Committed

[λ°±μ€€ 1219] μ˜€λ―Όμ‹μ˜ κ³ λ―Ό (JAVA) λ³Έλ¬Έ

πŸ”₯ Algorithm || λ¬Έμ œν’€μ΄/PS

[λ°±μ€€ 1219] μ˜€λ―Όμ‹μ˜ κ³ λ―Ό (JAVA)

WonderJay 2023. 1. 18. 14:19
728x90
λ°˜μ‘ν˜•
SMALL

문제

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

μ˜€λ―Όμ‹μ€ μ„ΈμΌμ¦ˆλ§¨μ΄λ‹€. μ˜€λ―Όμ‹μ˜ νšŒμ‚¬ 사μž₯λ‹˜μ€ μ˜€λ―Όμ‹μ—κ²Œ 물건을 μ΅œλŒ€ν•œ 많이 νŒ”μ•„μ„œ μ΅œλŒ€ μ΄μœ€μ„ 남기라고 ν–ˆλ‹€.

μ˜€λ―Όμ‹μ€ 고민에 λΉ μ‘Œλ‹€.

μ–΄λ–»κ²Œ ν•˜λ©΄ μ΅œλŒ€ μ΄μœ€μ„ λ‚Ό 수 μžˆμ„κΉŒ?

이 λ‚˜λΌμ—λŠ” N개의 λ„μ‹œκ°€ μžˆλ‹€. λ„μ‹œλŠ” 0λ²ˆλΆ€ν„° N-1λ²ˆκΉŒμ§€ 번호 맀겨져 μžˆλ‹€. μ˜€λ―Όμ‹μ˜ 여행은 Aλ„μ‹œμ—μ„œ μ‹œμž‘ν•΄μ„œ Bλ„μ‹œμ—μ„œ λλ‚œλ‹€.

μ˜€λ―Όμ‹μ΄ μ΄μš©ν•  수 μžˆλŠ” κ΅ν†΅μˆ˜λ‹¨μ€ μ—¬λŸ¬ 가지가 μžˆλ‹€. μ˜€λ―Όμ‹μ€ λͺ¨λ“  κ΅ν†΅μˆ˜λ‹¨μ˜ 좜발 λ„μ‹œμ™€ 도착 λ„μ‹œλ₯Ό μ•Œκ³  있고, λΉ„μš©λ„ μ•Œκ³  μžˆλ‹€. κ²Œλ‹€κ°€, μ˜€λ―Όμ‹μ€ 각각의 λ„μ‹œλ₯Ό λ°©λ¬Έν•  λ•Œλ§ˆλ‹€ 벌 수 μžˆλŠ” λˆμ„ μ•Œκ³ μžˆλ‹€. 이 값은 λ„μ‹œλ§ˆλ‹€ λ‹€λ₯΄λ©°, μ•‘μˆ˜λŠ” κ³ μ •λ˜μ–΄μžˆλ‹€. 또, λ„μ‹œλ₯Ό λ°©λ¬Έν•  λ•Œλ§ˆλ‹€ κ·Έ λˆμ„ 벌게 λœλ‹€.

μ˜€λ―Όμ‹μ€ 도착 λ„μ‹œμ— 도착할 λ•Œ, 가지고 μžˆλŠ” 돈의 μ•‘μˆ˜λ₯Ό μ΅œλŒ€λ‘œ ν•˜λ €κ³  ν•œλ‹€. 이 μ΅œλŒ“κ°’μ„ κ΅¬ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•˜μ‹œμ˜€.

μ˜€λ―Όμ‹μ΄ λ²„λŠ” λˆλ³΄λ‹€ μ“°λŠ” 돈이 λ§Žλ‹€λ©΄, 도착 λ„μ‹œμ— 도착할 λ•Œ 가지고 μžˆλŠ” 돈의 μ•‘μˆ˜κ°€ μŒμˆ˜κ°€ 될 μˆ˜λ„ μžˆλ‹€. 또, 같은 λ„μ‹œλ₯Ό μ—¬λŸ¬ 번 λ°©λ¬Έν•  수 있으며, κ·Έ λ„μ‹œλ₯Ό λ°©λ¬Έν•  λ•Œλ§ˆλ‹€ λˆμ„ 벌게 λœλ‹€. λͺ¨λ“  ꡐ톡 μˆ˜λ‹¨μ€ μž…λ ₯으둜 주어진 λ°©ν–₯으둜만 μ΄μš©ν•  수 있으며, μ—¬λŸ¬ 번 μ΄μš©ν•  μˆ˜λ„ μžˆλ‹€.

 

1219번: μ˜€λ―Όμ‹μ˜ κ³ λ―Ό

첫째 쀄에 도착 λ„μ‹œμ— 도착할 λ•Œ, 가지고 μžˆλŠ” 돈의 μ•‘μˆ˜μ˜ μ΅œλŒ“κ°’μ„ 좜λ ₯ν•œλ‹€. λ§Œμ•½ μ˜€λ―Όμ‹μ΄ 도착 λ„μ‹œμ— λ„μ°©ν•˜λŠ” 것이 λΆˆκ°€λŠ₯ν•  λ•ŒλŠ” "gg"λ₯Ό 좜λ ₯ν•œλ‹€. κ·Έλ¦¬κ³ , μ˜€λ―Όμ‹μ΄ 도착 λ„μ‹œμ— 도착

www.acmicpc.net

 

μž…λ ₯

첫째 쀄에 λ„μ‹œμ˜ 수 Nκ³Ό μ‹œμž‘ λ„μ‹œ, 도착 λ„μ‹œ 그리고 ꡐ톡 μˆ˜λ‹¨μ˜ 개수 M이 주어진닀. λ‘˜μ§Έ 쀄뢀터 M개의 μ€„μ—λŠ” ꡐ톡 μˆ˜λ‹¨μ˜ 정보가 주어진닀. ꡐ톡 μˆ˜λ‹¨μ˜ μ •λ³΄λŠ” “μ‹œμž‘ 끝 가격”κ³Ό 같은 ν˜•μ‹μ΄λ‹€. λ§ˆμ§€λ§‰ μ€„μ—λŠ” μ˜€λ―Όμ‹μ΄ 각 λ„μ‹œμ—μ„œ 벌 수 μžˆλŠ” 돈의 μ΅œλŒ“κ°’μ΄ 0번 λ„μ‹œλΆ€ν„° μ°¨λ‘€λŒ€λ‘œ 주어진닀.

Nκ³Ό M은 50보닀 μž‘κ±°λ‚˜ κ°™κ³ , 돈의 μ΅œλŒ“κ°’κ³Ό ꡐ톡 μˆ˜λ‹¨μ˜ 가격은 1,000,000보닀 μž‘κ±°λ‚˜ 같은 음이 μ•„λ‹Œ μ •μˆ˜μ΄λ‹€.

좜λ ₯

첫째 쀄에 도착 λ„μ‹œμ— 도착할 λ•Œ, 가지고 μžˆλŠ” 돈의 μ•‘μˆ˜μ˜ μ΅œλŒ“κ°’μ„ 좜λ ₯ν•œλ‹€. λ§Œμ•½ μ˜€λ―Όμ‹μ΄ 도착 λ„μ‹œμ— λ„μ°©ν•˜λŠ” 것이 λΆˆκ°€λŠ₯ν•  λ•ŒλŠ” "gg"λ₯Ό 좜λ ₯ν•œλ‹€. κ·Έλ¦¬κ³ , μ˜€λ―Όμ‹μ΄ 도착 λ„μ‹œμ— λ„μ°©ν–ˆμ„ λ•Œ λˆμ„ λ¬΄ν•œνžˆ 많이 가지고 μžˆμ„ 수 μžˆλ‹€λ©΄ "Gee"λ₯Ό 좜λ ₯ν•œλ‹€.

예제 μž…λ ₯ 1 

5 0 4 7
0 1 13
1 2 17
2 4 20
0 3 22
1 3 4747
2 0 10
3 4 10
0 0 0 0 0

예제 좜λ ₯ 1 

-32

예제 μž…λ ₯ 2 

5 0 4 5
0 1 10
1 2 10
2 3 10
3 1 10
2 4 10
0 10 10 110 10

예제 좜λ ₯ 2 

Gee

예제 μž…λ ₯ 3 

3 0 2 3
0 1 10
1 0 10
2 1 10
1000 1000 47000

예제 좜λ ₯ 3 

gg

예제 μž…λ ₯ 4 

2 0 1 2
0 1 1000
1 1 10
11 11

예제 좜λ ₯ 4 

Gee

예제 μž…λ ₯ 5 

1 0 0 1
0 0 10
7

예제 좜λ ₯ 5 

7

예제 μž…λ ₯ 6 

5 0 4 7
0 1 13
1 2 17
2 4 20
0 3 22
1 3 4747
2 0 10
3 4 10
8 10 20 1 100000

예제 좜λ ₯ 6 

99988

μ–΄λ ΅λ‹€.. πŸ˜’

 

λ²¨λ§Œν¬λ“œ μ•Œκ³ λ¦¬μ¦˜μ„ μ‘μš©ν•˜λŠ” λ¬Έμ œμ΄λ‹€.

 

문제 상황을 κ°„λ‹¨ν•˜κ²Œ 정리해보면,

 

μ˜€λ―Όμ‹μ€ κ΅ν†΅μˆ˜λ‹¨μ„ 타고 각각의 λ„μ‹œλ₯Ό λ°©λ¬Έν•œλ‹€.

 

그러면 κ΅ν†΅λΉ„μš©μ„ μ§€λΆˆν•˜κ³ , κ·Έ λ„μ‹œμ—μ„œ 벌 수 μžˆλŠ” λˆμ„ λ²Œμ–΄λ“€μΈλ‹€.

 

좜발 λ„μ‹œμ™€ 도착 λ„μ‹œκ°€ μ£Όμ–΄μ‘Œμ„ λ•Œ, μ˜€λ―Όμ‹μ΄ 벌 수 μžˆλŠ” μ΅œλŒ€ 값을 κ΅¬ν•œλ‹€.

 

λ‹€λ§Œ, μ˜€λ―Όμ‹μ΄ 도착 λ„μ‹œμ— 도달할 수 μ—†λŠ” κ²½μš°μ—λŠ” "gg" λ₯Ό 좜λ ₯ν•œλ‹€.

 

λ§Œμ•½, μ˜€λ―Όμ‹μ΄ 벌 수 μžˆλŠ” 돈이 λ¬΄ν•œλŒ€λΌλ©΄ "Gee" λ₯Ό 좜λ ₯ν•œλ‹€.

β–Ά μ΅œλ‹¨ 거리가 μ•„λ‹Œ μ΅œλŒ€ 거리(λΉ„μš©)λ₯Ό κ΅¬ν•˜λ©΄ λœλ‹€.

β–Ά μ˜€λ―Όμ‹μ΄ 벌 수 μžˆλŠ” 돈이 λ¬΄ν•œλŒ€..? λΌλŠ” 것은 μ–‘μ˜ 사이클이 λ°œμƒν•˜λŠ” κ²½μš°μ΄λ‹€. 즉, μ΅œλŒ€ 거리λ₯Ό κ΅¬ν•˜λ©΄μ„œ λ™μ‹œμ— μ–‘μ˜ μ‚¬μ΄ν΄μ˜ 유무λ₯Ό νŒλ³„ν•΄μ•Ό ν•œλ‹€. 

β–Ά 벨만 ν¬λ“œ μ•Œκ³ λ¦¬μ¦˜μ„ μ‘μš©ν•˜μž.

 

 

πŸ”₯ 근데, μ–‘μ˜ 사이클이 있으면 μ˜€λ―Όμ‹μ€ 무쑰건 λ¬΄ν•œλŒ€μ˜ λˆμ„ 벌 수 μžˆλ‚˜?

β–Ά μ•„λ‹ˆλ‹€! 

β–Ά 좜발 λ„μ‹œμ—μ„œ 도착 λ„μ‹œλ‘œ κ°€λŠ” κ²½λ‘œμ— μ–‘μ˜ 사이클을 ν˜•μ„±ν•œ λ…Έλ“œκ°€ 없을 μˆ˜λ„ μžˆλ‹€. 

β–Ά 즉, μ–‘μ˜ μ‚¬μ΄ν΄μ˜ 유무λ₯Ό λ‹¨μˆœν•˜κ²Œ νŒλ‹¨ν•˜λŠ” 것이 μ•„λ‹ˆλΌ μ–‘μ˜ 사이클에 μ˜ν•΄μ„œ 도착 λ…Έλ“œμ— 도달할 수 μ—†λ‹€λ©΄ μ–‘μ˜ μ‚¬μ΄ν΄λ‘œ 가지 μ•ŠλŠ”λ‹€.

 

 

🀨 μ΄λŠ” μ–΄λ–»κ²Œ μ²˜λ¦¬ν•  수 μžˆμ„κΉŒ...

β–Ά λ²¨λ§Œν¬λ“œ μ•Œκ³ λ¦¬μ¦˜μ„ μˆ˜ν–‰ν•œ 뒀에 BFS λ₯Ό ν•œλ²ˆ 더 μˆ˜ν–‰ν•˜μ—¬ 도달 μ—¬λΆ€λ₯Ό νŒλ‹¨ν•΄λ„ 될 것 κ°™λ‹€.

β–Ά λ‹€λ§Œ μ•„λž˜ λ°©λ²•μœΌλ‘œ ν•΄κ²°ν•˜λŠ” 것이 더 쉽닀. (λ°œμƒμ€ μ–΄λ ΅λ‹€..γ…œ)

β–Ά μœ„ λ¬Έμ œμ—μ„œ λ„μ‹œ(λ…Έλ“œ)의 κ°œμˆ˜λŠ” μ΅œλŒ€ 100 이닀. 

β–Ά 일반적으둜 벨만 ν¬λ“œ μ•Œκ³ λ¦¬μ¦˜μœΌλ‘œ N-1 번 만큼 에지λ₯Ό νƒμƒ‰ν•˜λ©° distance 배열을 μ—…λ°μ΄νŠΈλ₯Ό ν•  텐데, N + 100 λ²ˆμ •λ„λ‘œ μΆ©λΆ„νžˆ λ§Žμ€ 탐색을 ν•΄μ£Όλ©΄μ„œ μ–‘μ˜ μ‚¬μ΄ν΄μ—μ„œ 도달할 수 μžˆλŠ” λ…Έλ“œλ“€μ˜ λͺ¨λ“  distance λ₯Ό MAX 둜 지정해쀀닀.

β–Ά μ΄λ ‡κ²Œ ν•΄μ£Όλ©΄ λ²¨λ§Œν¬λ“œ μ•Œκ³ λ¦¬μ¦˜μ„ μˆ˜ν–‰ν•˜μ˜€μ„ λ•Œ, 도착 λ„μ‹œκ°€ MAX κ°€ λœλ‹€λ©΄ μ–‘μ˜ 사이클을 κ±°μ³μ„œ 도착 λ„μ‹œμ— μ˜€λ‹¬ν•  수 있고, μ΄λŠ” 곧 λ¬΄ν•œλŒ€μ˜ λˆμ„ 벌 수 μžˆλ‹€λŠ” 것을 μ˜λ―Έν•œλ‹€. Gee!

β–Ά 도착 λ„μ‹œκ°€ MAX κ°€ μ•„λ‹ˆλΌλŠ” 것은 μ–‘μ˜ μ‚¬μ΄ν΄μ—μ„œ 도착 λ„μ‹œλ‘œ 도달할 수 μ—†μœΌλ―€λ‘œ distance [도착 λ„μ‹œ]에 μ €μž₯된 값을 좜λ ₯ν•œλ‹€.

β–Ά 벨만 ν¬λ“œ μ•Œκ³ λ¦¬μ¦˜μ„ μˆ˜ν–‰ν•˜κΈ° 전에 distnace 배열을 MIN 으둜 μ΄ˆκΈ°ν™”ν•΄μ€€λ‹€. (μΌλ°˜μ μœΌλ‘œλŠ” MAX 둜 μ΄ˆκΈ°ν™”ν–ˆλ‹€. μ™œ MIN 이냐면 벨만 ν¬λ“œ μ•Œκ³ λ¦¬μ¦˜μœΌλ‘œ μ΅œλ‹¨ 거리가 μ•„λ‹Œ μ΅œλŒ€ 거리λ₯Ό 찾도둝 λ³€ν˜•ν•˜κΈ° μœ„ν•¨μ΄λ‹€.)

β–Ά 벨만 ν¬λ“œ μ•Œκ³ λ¦¬μ¦˜μ„ μˆ˜ν–‰ν•˜κ³  λ‚˜μ„œ distance [ λ„μ°©λ„μ‹œ ] κ°€ μ—¬μ „νžˆ MIN μ΄λΌλŠ” 것은 μ˜€λ―Όμ‹μ΄ 도착 λ„μ‹œλ‘œ λ„λ‹¬ν•˜μ§€ λͺ»ν•œλ‹€λŠ” 것을 μ˜λ―Έν•œλ‹€. Gee

 

 

🧐 벨만 ν¬λ“œ μ•Œκ³ λ¦¬μ¦˜μ—μ„œ distance λ₯Ό μ—…λ°μ΄νŠΈ ν•˜λŠ” λ‘œμ§μ€ μ•„λž˜μ™€ κ°™λ‹€.

β€» ν˜„μž¬ 탐색 쀑인 edge 에 λŒ€ν•˜μ—¬, (edge ν΄λž˜μŠ€μ—λŠ” 좜발 λ„μ‹œ, 도착 λ„μ‹œ, ꡐ톡 λΉ„μš©μ΄ λ“€μ–΄μžˆλ‹€.) 

1. 좜발 λ…Έλ“œκ°€ λ°©λ¬Έν•˜μ§€ μ•Šμ€ λ…Έλ“œλΌλ©΄ (dist[now_edge.μΆœλ°œλ„μ‹œ]==MIN) update ν•˜μ§€ μ•ŠλŠ”λ‹€. 

2. λ§Œμ•½ 좜발 λ…Έλ“œκ°€ μ–‘μ˜ 사이클에 μ—°κ²°λœ λ…Έλ“œλΌλ©΄ (dist[now_edge.μΆœλ°œλ„μ‹œ]==MAX) 도착 λ…Έλ“œ λ˜ν•œ MAX 둜 ν•΄μ€€λ‹€.

μ™œλƒλ©΄ A→B 의 κ²½λ‘œμ—μ„œ A κ°€ μ–‘μ˜ 사이클에 μ—°κ²°λœ λ…Έλ“œλΌλ©΄ λ‹Ήμ—°νžˆ B λ˜ν•œ μ–‘μ˜ 사이클에 μ—°κ²°λœ λ…Έλ“œμΌ 것이기 λ•Œλ¬Έμ΄λ‹€.

3. μœ„ κ²½μš°μ— λͺ¨λ‘ ν•΄λ‹Ήν•˜μ§€ μ•ŠμœΌλ©΄μ„œ, μ˜€λ―Όμ‹μ΄ ν˜„μž¬ 탐색쀑인 edge 의 도착 λ…Έλ“œλ‘œ 갔을 λ•Œ 더 λ§Žμ€ λˆμ„ 벌 수 μžˆλ‹€λ©΄?

(dist[now_edge.λ„μ°©λ„μ‹œ] < dist[now_edge.μΆœλ°œλ„μ‹œ] + now_edge.λ„μ°©λ„μ‹œμ—μ„œ 벌 수 μžˆλŠ” 돈 - now_edge.κ΅ν†΅λΉ„μš©)

distance λ₯Ό μ—…λ°μ΄νŠΈν•œλ‹€.

 

 

⭐ 이 λ¬Έμ œμ—μ„œ μ€‘μš”ν•œ 것은 μœ„μ—μ„œ μ–ΈκΈ‰ν–ˆλ“―μ΄ μ–‘μ˜ μ‚¬μ΄ν΄μ—μ„œ 도착 λ„μ‹œλ‘œ 도달가λŠ₯ν•˜μ§€ μ•ŠλŠ” 지λ₯Ό νŒλ‹¨ν•΄μ•Όν•œλ‹€.

β–Ά 벨만-ν¬λ“œ μ•Œκ³ λ¦¬μ¦˜μ—μ„œ 사이클 μ—¬λΆ€λŠ” μ—£μ§€μ˜ 개수만큼의 μ—…λ°μ΄νŠΈ 이후에, 벨만-ν¬λ“œ μ•Œκ³ λ¦¬μ¦˜μ„ 더 μˆ˜ν–‰ν–ˆμ„ λ•Œ dist κ°’μ˜ λ³€ν™”κ°€ μƒκΈ°λŠ” 지 μ—¬λΆ€λ₯Ό ν™•μΈν•˜λ©΄ λœλ‹€.

β–Ά 즉, edge 의 개수만큼 μ—…λ°μ΄νŠΈλ₯Ό 진행 ν•œ 뒀에도 μ—…λ°μ΄νŠΈκ°€ λ°œμƒν•œλ‹€λ©΄ μ–‘μ˜ 사이클이 μžˆλ‹€λŠ” 것이닀.

β–Ά 보톡인 μ–‘μ˜ 사이클 μ—¬λΆ€λ§Œ νŒλ‹¨ν•˜λ©΄ λ˜μ§€λ§Œ, 이 λ¬Έμ œμ—μ„œλŠ” μ–‘μ˜ 사이클과 도착 λ„μ‹œκ°€ μ—°κ²°λ˜μ—ˆλŠ”μ§€ μ—¬λΆ€λ₯Ό λ”°λ‘œ νŒλ‹¨ν•΄μ£Όμ–΄μ•Ό ν•œλ‹€.

β–Ά 그러면 μ–΄λ–»κ²Œ ν• κΉŒ?

β–Ά μ—£μ§€μ˜ κ°œμˆ˜λ³΄λ‹€ 더 λ§Žμ€ λ°˜λ³΅μ„ μˆ˜ν–‰ν•˜λ©°, μ–‘μ˜ 사이클이 λ°œμƒν•œλ‹€λ©΄ ν•΄λ‹Ή 엣지에 λŒ€ν•˜μ—¬ dist[now_edge.λ„μ°©λ„μ‹œ] = MAX 둜 지정해쀀닀.

β–Ά μ΄λ ‡κ²Œ ν•˜λ©΄ μ–‘μ˜ μ‚¬μ΄ν΄μ—μ„œ 도달할 수 μžˆλŠ” λͺ¨λ“  λ…Έλ“œλŠ” dist 값이 MAX κ°€ λœλ‹€.

 

μœ„ 과정이 λλ‚˜λ©΄ dist[도착 λ„μ‹œ] 에 λ”°λΌμ„œ Gee, gg, dist[도착 λ„μ‹œ] λ₯Ό 좜λ ₯ν•΄μ£Όλ©΄ ν•΄κ²°!

 

import java.io.*;
import java.util.Arrays;
import java.util.StringTokenizer;

public class Main {
    static Edge[] graph;

    public static void main(String[] args) throws IOException {
        System.setIn(new FileInputStream("src/input.txt"));
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        StringTokenizer stk = new StringTokenizer(br.readLine());

        int n = Integer.parseInt(stk.nextToken()); // λ…Έλ“œμ˜ 수
        int start = Integer.parseInt(stk.nextToken()); // μ‹œμž‘λ„μ‹œ
        int destination = Integer.parseInt(stk.nextToken()); // 도착 λ„μ‹œ
        int m = Integer.parseInt(stk.nextToken()); // μ—μ§€μ˜ 수

        graph = new Edge[m + 1];
        long[] dist = new long[n + 1];

        for (int i = 0; i < m; i++) {
            stk = new StringTokenizer(br.readLine());
            int a = Integer.parseInt(stk.nextToken());
            int b = Integer.parseInt(stk.nextToken());
            int w = Integer.parseInt(stk.nextToken());
            graph[i] = new Edge(a, b, w);
        }
        long [] money = new long[n+1];

        stk = new StringTokenizer(br.readLine());
        for(int i = 0 ; i < n; i++){
            money[i] = Integer.parseInt(stk.nextToken());
        }

        // 벨만 ν¬λ“œ μ•Œκ³ λ¦¬μ¦˜
        Arrays.fill(dist, Long.MIN_VALUE);
        dist[start] = money[start];

        for(int i = 0 ; i <= n+100; i++){
            for(int j = 0 ; j < m; j++){
                Edge now_edge = graph[j];
                if(dist[now_edge.st]==Long.MIN_VALUE)
                    continue;
                else if(dist[now_edge.st]==Long.MAX_VALUE){
                    dist[now_edge.end] = Long.MAX_VALUE;
                }
                else if(dist[now_edge.end] < dist[now_edge.st]+money[now_edge.end]-now_edge.cost){
                    dist[now_edge.end] = dist[now_edge.st]+money[now_edge.end]-now_edge.cost;
                    if(i>=n)
                        dist[now_edge.end] = Long.MAX_VALUE;
                }
            }
        }
        if(dist[destination] == Long.MIN_VALUE)
            bw.write("gg\n");
        else if(dist[destination] == Long.MAX_VALUE)
            bw.write("Gee\n");
        else bw.write(dist[destination]+"\n");
        bw.flush();
        bw.close();
    }

    static class Edge {
        int st;
        int end;
        int cost;

        public Edge(int s, int e, int c) {
            this.st = s;
            this.end = e;
            this.cost = c;
        }
    }
}

 

728x90
λ°˜μ‘ν˜•
LIST
Comments