๊ด€๋ฆฌ ๋ฉ”๋‰ด

๐‘†๐‘ข๐‘›๐‘ โ„Ž๐‘–๐‘›๐‘’ ๐‘Ž๐‘“๐‘ก๐‘’๐‘Ÿ ๐‘Ÿ๐‘Ž๐‘–๐‘›โœง

[Python] ๋ฐฑ์ค€ 11004 & ๋ฐฑ์ค€ 10282 ๋ณธ๋ฌธ

# ๋ฐฑ์ค€ 11004๋ฒˆ
# ์ˆ˜ N๊ฐœ A1, A2, ... A_N์ด ์ฃผ์–ด์ง„๋‹ค. A๋ฅผ ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌํ–ˆ์„ ๋•Œ, ์•ž์—์„œ๋ถ€ํ„ฐ k๋ฒˆ์งธ ์žˆ๋Š” ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค

# ์ถœ๋ ฅ
# A๋ฅผ ์ •๋ ฌํ–ˆ์„ ๋•Œ, ์•ž์—์„œ๋ถ€ํ„ฐ k๋ฒˆ์งธ ์žˆ๋Š” ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

# ๋ฌธ์ œ ํ’€์ด ํ•ต์‹ฌ ์•„์ด๋””์–ด
# ๋ฐ์ดํ„ฐ์˜ ๊ฐœ์ˆ˜๊ฐ€ ์ตœ๋Œ€ 5000000๊ฐœ ์ด๋ฏ€๋กœ ์‹œ๊ฐ„ ๋ณต์žก๋„ O(NlogN)์˜ ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ด์šฉํ•ด์•ผํ•œ๋‹ค.
# ๊ณ ๊ธ‰ ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜(๋ณ‘ํ•ฉ ์ •๋ ฌ, ํ€ต ์ •๋ ฌ, ํž™ ์ •๋ ฌ ๋“ฑ)์„ ์ด์šฉํ•˜์—ฌ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐ๊ฐ€๋Šฅ

def merge_sort(data):
    if len(data) <= 1:
        return data

    medium = int(len(data)) // 2
    left = merge_sort(data[:medium])
    right = merge_sort(data[medium:])
    merged = []
    left_point, right_point = 0, 0

    while len(left) > left_point and len(right) > right_point:
        if left[left_point] < right[right_point]:
            left.append(left[left_point])
            left_point += 1
        else:
            right.append(right[right_point])
            right_point += 1

        while len(left) > left_point:
            merged.append(left[left_point])
            left_point += 1

        while len(right) > right_point:
            merged.append(right[right_point])
            right_point += 1

        return merged


n, k = map(int, input().split(' '))
data = list(map(int, input().split(' ')))
merged = merge_sort(data)
print(merged[k - 1])# k๋ฒˆ์งธ ์›์†Œ๋ฅผ ์ถœ๋ ฅํ•ด์•ผ ํ•˜๊ธฐ๋•Œ๋ฌธ์— k-1์„ ์ž…๋ ฅ

 

#ํ•ดํ‚น 10282

import sys
import heapq

def dijkstra(graph, min_dist, start_node):
    queue = []
    heapq.heappush(queue, [0, start_node])
    min_dist[start_node] = 0
    while queue:
        dist, current = heapq.heappop(queue)
        if min_dist[current] < dist :
            continue
        for next, sec in graph[current]:
            cost = min_dist[current] + sec
            if cost < min_dist[next]:
                min_dist[next] = cost
                heapq.heappush(queue, [cost, next])


    return min_dist

t= int(input())
for _ in range(t):
    n, d, c = map(int, sys.stdin.readline().split())
    graph = [[] for _ in range(n+1)]
    min_dist = [1e9] * (n+1)
    for _ in range(d):
        a, b, s = map(int, sys.stdin.readline().split())
        graph[b].append([a,s])
    min_dist= dijkstra(graph, min_dist, c)

    answer = 0
    cnt = 0
    for i in min_dist:
        if i != 1e9:
            cnt += 1
            answer = max(answer, i)
    print(cnt, answer)