We will find a way, we always have.

-interstellar

Problem Solving/๋ฐฑ์ค€

[๋ฐฑ์ค€] 16118๋ฒˆ ๋‹ฌ๋น› ์—ฌ์šฐ - ํŒŒ์ด์ฌ

Redddy 2022. 10. 10. 21:55

๐Ÿ”ˆ ๋ฌธ์ œ

๊ด€์•…์‚ฐ ๊ธฐ์Šญ์—๋Š” ๋ณด๋ฆ„๋‹ฌ์„ ๊ธฐ๋‹ค๋ฆฌ๋Š” ๋‹ฌ๋น› ์—ฌ์šฐ๊ฐ€ ํ•œ ๋งˆ๋ฆฌ ์‚ด๊ณ  ์žˆ๋‹ค. ๋‹ฌ๋น› ์—ฌ์šฐ๊ฐ€ ๋ณด๋ฆ„๋‹ฌ์˜ ๋‹ฌ๋น›์„ ๋ฐ›์œผ๋ฉด ์•„๋ฆ„๋‹ค์šด ๊ตฌ๋ฏธํ˜ธ๋กœ ๋ณ€์‹ ํ•  ์ˆ˜ ์žˆ๋‹ค. ํ•˜์ง€๋งŒ ๋ณด๋ฆ„๋‹ฌ์„ ๊ธฐ๋‹ค๋ฆฌ๋Š” ๊ฑด ๋‹ฌ๋น› ์—ฌ์šฐ๋ฟ๋งŒ์ด ์•„๋‹ˆ๋‹ค. ๋‹ฌ๋น›์„ ๋ฐ›์•„์„œ ๋ฉ‹์ง„ ๋Š‘๋Œ€์ธ๊ฐ„์ด ๋˜๊ณ  ์‹ถ์–ด ํ•˜๋Š” ๋‹ฌ๋น› ๋Š‘๋Œ€๋„ ํ•œ ๋งˆ๋ฆฌ ์‚ด๊ณ  ์žˆ๋‹ค.

๊ด€์•…์‚ฐ์—๋Š” 1๋ฒˆ๋ถ€ํ„ฐ $ N $๋ฒˆ๊นŒ์ง€์˜ ๋ฒˆํ˜ธ๊ฐ€ ๋ถ™์€ $ N $๊ฐœ์˜ ๋‚˜๋ฌด ๊ทธ๋ฃจํ„ฐ๊ธฐ๊ฐ€ ์žˆ๊ณ , ๊ทธ๋ฃจํ„ฐ๊ธฐ๋“ค ์‚ฌ์ด์—๋Š” $ M $๊ฐœ์˜ ์˜ค์†”๊ธธ์ด ๋‚˜ ์žˆ๋‹ค. ์˜ค์†”๊ธธ์€ ์–ด๋–ค ๋ฐฉํ–ฅ์œผ๋กœ๋“  ์ง€๋‚˜๊ฐˆ ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์–ด๋–ค ๋‘ ๊ทธ๋ฃจํ„ฐ๊ธฐ ์‚ฌ์ด์— ๋‘ ๊ฐœ ์ด์ƒ์˜ ์˜ค์†”๊ธธ์ด ๋‚˜ ์žˆ๋Š” ๊ฒฝ์šฐ๋Š” ์—†๋‹ค. ๋‹ฌ๋น› ์—ฌ์šฐ์™€ ๋‹ฌ๋น› ๋Š‘๋Œ€๋Š” 1๋ฒˆ ๋‚˜๋ฌด ๊ทธ๋ฃจํ„ฐ๊ธฐ์—์„œ ์‚ด๊ณ  ์žˆ๋‹ค.

๋ณด๋ฆ„๋‹ฌ์ด ๋œจ๋ฉด ๋‚˜๋ฌด ๊ทธ๋ฃจํ„ฐ๊ธฐ๋“ค ์ค‘ ํ•˜๋‚˜๊ฐ€ ๋‹ฌ๋น›์„ ๋ฐ›์•„ ๋ฐ๊ฒŒ ๋น›๋‚˜๊ฒŒ ๋œ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ๋‹ฌ๋น› ์—ฌ์šฐ์™€ ๋‹ฌ๋น› ๋Š‘๋Œ€๋Š” ๋จผ์ € ๋‹ฌ๋น›์„ ๋…์ฐจ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ์ตœ๋Œ€ํ•œ ๋นจ๋ฆฌ ์˜ค์†”๊ธธ์„ ๋”ฐ๋ผ์„œ ๊ทธ ๊ทธ๋ฃจํ„ฐ๊ธฐ๋กœ ๋‹ฌ๋ ค๊ฐ€์•ผ ํ•œ๋‹ค. ์ด๋•Œ ๋‹ฌ๋น› ์—ฌ์šฐ๋Š” ๋Š˜ ์ผ์ •ํ•œ ์†๋„๋กœ ๋‹ฌ๋ ค๊ฐ€๋Š” ๋ฐ˜๋ฉด, ๋‹ฌ๋น› ๋Š‘๋Œ€๋Š” ๋‹ฌ๋น› ์—ฌ์šฐ๋ณด๋‹ค ๋” ๋น ๋ฅด๊ฒŒ ๋‹ฌ๋ฆด ์ˆ˜ ์žˆ์ง€๋งŒ ์ฒด๋ ฅ์ด ๋ถ€์กฑํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋‹ค๋ฅธ ์ „๋žต์„ ์‚ฌ์šฉํ•œ๋‹ค. ๋‹ฌ๋น› ๋Š‘๋Œ€๋Š” ์ถœ๋ฐœํ•  ๋•Œ ์˜ค์†”๊ธธ ํ•˜๋‚˜๋ฅผ ๋‹ฌ๋น› ์—ฌ์šฐ์˜ ๋‘ ๋ฐฐ์˜ ์†๋„๋กœ ๋‹ฌ๋ ค๊ฐ€๊ณ , ๊ทธ ๋’ค๋กœ๋Š” ์˜ค์†”๊ธธ ํ•˜๋‚˜๋ฅผ ๋‹ฌ๋น› ์—ฌ์šฐ์˜ ์ ˆ๋ฐ˜์˜ ์†๋„๋กœ ๊ฑธ์–ด๊ฐ€๋ฉฐ ์ฒด๋ ฅ์„ ํšŒ๋ณตํ•˜๊ณ  ๋‚˜์„œ ๋‹ค์Œ ์˜ค์†”๊ธธ์„ ๋‹ค์‹œ ๋‹ฌ๋น› ์—ฌ์šฐ์˜ ๋‘ ๋ฐฐ์˜ ์†๋„๋กœ ๋‹ฌ๋ ค๊ฐ€๋Š” ๊ฒƒ์„ ๋ฐ˜๋ณตํ•œ๋‹ค. ๋‹ฌ๋น› ์—ฌ์šฐ์™€ ๋‹ฌ๋น› ๋Š‘๋Œ€๋Š” ๊ฐ์ž ๊ฐ€์žฅ ๋น ๋ฅด๊ฒŒ ๋‹ฌ๋น›์ด ๋น„์น˜๋Š” ๊ทธ๋ฃจํ„ฐ๊ธฐ๊นŒ์ง€ ๋‹ค๋‹ค๋ฅผ ์ˆ˜ ์žˆ๋Š” ๊ฒฝ๋กœ๋กœ ์ด๋™ํ•œ๋‹ค. ๋”ฐ๋ผ์„œ ๋‘˜์˜ ์ด๋™ ๊ฒฝ๋กœ๊ฐ€ ์„œ๋กœ ๋‹ค๋ฅผ ์ˆ˜๋„ ์žˆ๋‹ค.

์ถœ์ œ์ž๋Š” ๊ด€์•…์‚ฐ์˜ ๋ชจ๋“  ๋™๋ฌผ์„ ์‚ฌ๋ž‘ํ•˜์ง€๋งŒ, ์ด๋ฒˆ์—๋Š” ๋‹ฌ๋น› ์—ฌ์šฐ๋ฅผ ์กฐ๊ธˆ ๋” ์‚ฌ๋ž‘ํ•ด ์ฃผ๊ธฐ๋กœ ํ–ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๋‹ฌ๋น› ์—ฌ์šฐ๊ฐ€ ๋‹ฌ๋น› ๋Š‘๋Œ€๋ณด๋‹ค ๋จผ์ € ๋„์ฐฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ทธ๋ฃจํ„ฐ๊ธฐ์— ๋‹ฌ๋น›์„ ๋น„์ถฐ ์ฃผ๋ ค๊ณ  ํ•œ๋‹ค. ์ด๋Ÿฐ ๊ทธ๋ฃจํ„ฐ๊ธฐ๊ฐ€ ๋ช‡ ๊ฐœ๋‚˜ ์žˆ๋Š”์ง€ ์•Œ์•„๋ณด์ž.

 

๐Ÿ“์ž…๋ ฅ

์ฒซ ์ค„์— ๋‚˜๋ฌด ๊ทธ๋ฃจํ„ฐ๊ธฐ์˜ ๊ฐœ์ˆ˜์™€ ์˜ค์†”๊ธธ์˜ ๊ฐœ์ˆ˜๋ฅผ ์˜๋ฏธํ•˜๋Š” ์ •์ˆ˜ $ N, M $ $(2 ≤ N ≤ 4,000, 1 ≤ M ≤ 100,000) $์ด ์ฃผ์–ด์ง„๋‹ค.
๋‘ ๋ฒˆ์งธ ์ค„๋ถ€ํ„ฐ $ M $๊ฐœ์˜ ์ค„์— ๊ฑธ์ณ ๊ฐ ์ค„์— ์„ธ ๊ฐœ์˜ ์ •์ˆ˜ $ a, b, d $ $(1 ≤ a, b ≤ N, a ≠ b, 1 ≤ d ≤ 100,000) $๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ์ด๋Š” $ a $๋ฒˆ ๊ทธ๋ฃจํ„ฐ๊ธฐ์™€ $ b $๋ฒˆ ๊ทธ๋ฃจํ„ฐ๊ธฐ ์‚ฌ์ด์— ๊ธธ์ด๊ฐ€ $ d $์ธ ์˜ค์†”๊ธธ์ด ๋‚˜ ์žˆ์Œ์„ ์˜๋ฏธํ•œ๋‹ค.

 

๐Ÿ“‘์ถœ๋ ฅ

์ฒซ ์ค„์— ๋‹ฌ๋น› ์—ฌ์šฐ๊ฐ€ ๋‹ฌ๋น› ๋Š‘๋Œ€๋ณด๋‹ค ๋จผ์ € ๋„์ฐฉํ•  ์ˆ˜ ์žˆ๋Š” ๋‚˜๋ฌด ๊ทธ๋ฃจํ„ฐ๊ธฐ์˜ ๊ฐœ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

 

๐Ÿ“š ๋ฌธ์ œ ํ’€์ด

์šฐ์„  ์ด ๋ฌธ์ œ๋ฅผ ํ’€๋•Œ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ถ„๋ฅ˜๋ฅผ ๋ณด์ง€ ์•Š์•˜๋‹ค(์ด์ œ ์ด๋ ‡๊ฒŒ ์—ฐ์Šตํ•ด๋ณด๋ ค๊ณ  ํ•œ๋‹ค)

์ž˜ ์ฝ์–ด๋ณด๋‹ˆ ๊ทธ๋ž˜ํ”„ ๋ฌธ์ œ์ธ๊ฒƒ์€ ํŒŒ์•…ํ•˜์˜€๊ณ , ๋ฌธ์ œ๋ฅผ ๊ฐ„๋žตํ•˜๊ฒŒ ์ •๋ฆฌํ•ด๋ณด์•˜๋‹ค. 

 

์—ฌ์šฐ์™€ ๋Š‘๋Œ€์˜ ๊ทธ๋ž˜ํ”„ ํƒ์ƒ‰ ์†๋„๋Š” ๋‹ค๋ฅด๊ณ  ๋ฌธ์ œ๋Š” ๋Š‘๋Œ€์ด๋‹ค. ์—ฌ์šฐ๋Š” ๋‹จ์ˆœํžˆ ๋ฐ์ดํฌ์ŠคํŠธ๋ผ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ 1๋ฒˆ ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜์—ฌ ๋‚˜๋จธ์ง€ ๋…ธ๋“œ์˜ ๋ฐฉ๋ฌธ ์‹œ๊ฐ„์„ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ์—ˆ์ง€๋งŒ, ๋Š‘๋Œ€๋Š” ์กฐ๊ธˆ ๋‹ฌ๋ž๋‹ค. ์ฒ˜์Œ์—๋Š” ๋‘๋ฐฐ์†๋„๋กœ, ๋‹ค์Œ์€ 0.5๋ฐฐ์†์œผ๋กœ ๋˜ ๋‹ค์Œ์€ 2๋ฐฐ์†๋„๋กœ ์ด๋ ‡๊ฒŒ ์†๋„๊ฐ€ ๋ณ€์น™์ ์ด์˜€๋‹ค.

๋ฐฉ๋ฌธ ์‹œ๊ฐ„์„ ๋‹ด์€ ๋ฐฐ์—ด์„ 1์ฐจ์›์œผ๋กœ ๋‘๋ฉด ์ด๊ฒƒ์„ ์ฒดํฌํ•  ์ˆ˜ ์—†์—ˆ๊ธฐ์— 2์ฐจ์› ๋ฐฐ์—ด์„ ์‚ฌ์šฉํ•˜์˜€๋‹ค.

์ฆ‰ n๋ฒˆ์งธ ๋…ธ๋“œ์— ๋ฐฉ๋ฌธํ•˜๊ธฐ ์ „์— 2๋ฐฐ์†์œผ๋กœ ์™”๋Š”์ง€, 0.5๋ฐฐ์†์œผ๋กœ ์™”๋Š”์ง€ ๋‘˜ ๋‹ค ๋‹ด๋Š” ๊ฒƒ์ด๋‹ค.

์ด๋ ‡๊ฒŒ ๋Š‘๋Œ€๊นŒ์ง€ ๋ฐฉ๋ฌธ ์‹œ๊ฐ„์„ ํŒŒ์•…ํ–ˆ๋‹ค๋ฉด ๋๋‚œ ๊ฒƒ์ด๋‹ค. 

์—ฌ์šฐ์™€ ๋Š‘๋Œ€์˜ ๋ฐฉ๋ฌธ ์†๋„๋ฅผ ๋น„๊ตํ•˜์—ฌ ์—ฌ์šฐ๊ฐ€ ๋นจ๋ฆฌ ์˜จ๊ฒƒ์„ ์นด์šดํŠธํ•˜์—ฌ ์ถœ๋ ฅํ•œ๋‹ค.

 

 

 

๐Ÿ’ป ์ฝ”๋“œ

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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
import sys, heapq
input = sys.stdin.readline
 
INF = int(1e9)
 
# ์—ฌ์šฐ ๋ฐ์ดํฌ์ŠคํŠธ๋ผ
def dijkstra():
    distance = [INF]*(n+1)
    distance[1= 0
    hq = []
    heapq.heappush(hq, (0,1))
    while hq:
        dist, now = heapq.heappop(hq)
        if distance[now] < dist:
            continue
        for nex,cost in graph[now]:
            if dist+cost<distance[nex]:
                distance[nex] = dist+cost
                heapq.heappush(hq, (cost+dist, nex))
    return distance[2:]
    
 
# ๋Š‘๋Œ€ ๋ฐ์ดํฌ์ŠคํŠธ๋ผ
def dij_wolf():
    # 2์ฐจ์› ๋ฐฐ์—ด
    distance = [[INF]*(2for _ in range(n+1)]
    distance[1= [INF,0#distance[1][1] = ์‹œ์ž‘, 0๋ฒˆ์งธ ์ธ๋ฑ์Šค๊ฐ€ 0.5๋ฐฐ์†, 1๋ฒˆ์งธ ์ธ๋ฑ์Šค๊ฐ€ 2๋ฐฐ์†
    hq = []
    heapq.heappush(hq, (0,1,1))
    while hq:
        dist, now, run = heapq.heappop(hq)
        if distance[now][run]!=dist:
            continue
 
        for nex, cost in graph[now]:
            if run==1 and distance[nex][0]>dist+(cost//2):
                distance[nex][0= dist+(cost//2)
                heapq.heappush(hq, ((cost//2)+dist, nex,0))
            elif run==0 and distance[nex][1]>dist+(cost*2):
                distance[nex][1= dist+(cost*2)
                heapq.heappush(hq, ((cost*2)+dist, nex, 1))
 
 
    return distance[2:]
 
def result(a,b):
    res = 0
    for i in range(n-1):
        if a[i]<min(b[i]):
            res += 1
    return res
 
 
n,m = map(int,input().split())
graph = [[] for _ in range(n+1)]
 
for _ in range(m):
    a,b,d = map(int,input().split())
    d*=2 # ๋‹ด์„๋•Œ X2 ๋‹ด์Œ. ์™œ? ๋Š‘๋Œ€ 0.5์—์„œ ์‹ค์ˆ˜ ์—ฐ์‚ฐ 
    graph[a].append((b,d))
    graph[b].append((a,d))
 
fox = dijkstra()
wolf = dij_wolf() 
 
print(result(fox,wolf))
cs

 

๐Ÿญ ์‹œํ–‰์ฐฉ์˜ค

pypy๊ฐ€ ์‹œ๊ฐ„์ดˆ๊ณผ๊ฐ€ ๋ฐœ์ƒํ•œ ์ด์œ ๋Š” ๋‚˜๋„ ๋ชจ๋ฅด๊ฒ ๋‹ฟ

๐Ÿ”— ๋ฌธ์ œ๋งํฌ ๋‹ฌ๋น› ์—ฌ์šฐ

 

16118๋ฒˆ: ๋‹ฌ๋น› ์—ฌ์šฐ

์ฒซ ์ค„์— ๋‚˜๋ฌด ๊ทธ๋ฃจํ„ฐ๊ธฐ์˜ ๊ฐœ์ˆ˜์™€ ์˜ค์†”๊ธธ์˜ ๊ฐœ์ˆ˜๋ฅผ ์˜๋ฏธํ•˜๋Š” ์ •์ˆ˜ N, M(2 ≤ N ≤ 4,000, 1 ≤ M ≤ 100,000)์ด ์ฃผ์–ด์ง„๋‹ค. ๋‘ ๋ฒˆ์งธ ์ค„๋ถ€ํ„ฐ M๊ฐœ์˜ ์ค„์— ๊ฑธ์ณ ๊ฐ ์ค„์— ์„ธ ๊ฐœ์˜ ์ •์ˆ˜ a, b, d(1 ≤ a, b ≤ N, a ≠ b

www.acmicpc.net