ログインしてください。
公式
D - 道しるべを置いて誘導せよ / Place Signposts to Guide the Way 解説
by
D - 道しるべを置いて誘導せよ / Place Signposts to Guide the Way 解説
by
harurun4635
バリケードがある交差点を通らないで交差点 \(N\) から交差点 \(1\) まで行く最短経路を求めればよいです。
この距離を \(D\) としたとき、 \(D\) 個で可能なのは明らかです。なぜならば、交差点 \(N\) 以外の最短経路の頂点の上に「道しるべ」をおけば良いからです。
また、 \(D\) 個以上必要なのも明らかです。バリケードがある頂点に子猫が到達する方法はありませんから、子猫の移動回数は \(D\) を下回る事はなく、子猫の移動回数以上の道しるべが必要だからです。
実装例
n, m, k = map(int, input().split())
g = [[] for i 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)
que = [n-1]
d = [-1] * n
d[n-1] = 0
b = list(map(int, input().split()))
for x in b:
d[x-1] = -2
for u in que:
for v in g[u]:
if d[v] == -1:
d[v] = d[u] + 1
que.append(v)
print(d[0])
投稿日時:
最終更新: