Official

C - 感染経路の追跡 / Tracing Infection Routes Editorial by sounansya Editorial for printing


頂点 \(S\) から各頂点までの最短距離を求め、距離が \(K\) 以下のちょ点数を出力すれば良いです。

各頂点までの最短距離は幅優先探索などで計算することができます。

実装例(Python3)

from collections import deque

n, m, s, k = map(int, input().split())
g = [[] for _ in range(n)]
for i in range(m):
    u, v = map(int, input().split())
    g[u - 1].append(v - 1)
    g[v - 1].append(u - 1)
INF = 10**9
q = deque()
d = [INF] * n
q.append(s - 1)
d[s - 1] = 0
while q:
    x = q.popleft()
    for y in g[x]:
        if d[y] != INF:
            continue
        d[y] = d[x] + 1
        q.append(y)
ans = 0
for v in d:
    ans += v <= k
print(ans)

posted:
last update: