NISHIO Hirokazu[Translate]
ABC190E
from ABC190
ABC190E
辺の数の制約があるので辺が10^5ならダイクストラ使えるを思いつく
高々17頂点なので17回ダイクストラしてC頂点間の距離を求めて巡回セールスマン問題(始点に戻らないタイプ)
サンプルはあっさり通ったが、提出すると20AC 5WA 10TLE
厄介だな…
WAの原因
到達不能判定をする時にダイクストラの結果にINFが含まれるかで判断してた
それは「グラフのいずれかの頂点が到達不能か?」を判定している
C頂点が到達可能なら他の頂点はどうでもいい
TLEの解決方法が皆目検討つかず時間切れ
公式解説
え、じゃあダイクストラではなくBFSしてたら通ったということ?
試したら通った…
python
def main(): N, M = map(int, input().split()) from collections import defaultdict edges = defaultdict(list) for _i in range(M): frm, to = map(int, input().split()) edges[frm - 1].append(to - 1) # -1 for 1-origin vertexes edges[to - 1].append(frm - 1) # if bidirectional K = int(input()) CS = list(int(x) - 1 for x in input().split()) INF = 9223372036854775807 dist = [] for c in CS: d = one_to_all_bfs(c, N, edges, INF) dd = [d[CS[i]] for i in range(K)] if INF in dd: print(-1) return dist.append(dd) ret = tsp_not_return(K, dist) print(ret + 1)
コード全体はこちらAC

"Engineer's way of creating knowledge" the English version of my book is now available on [Engineer's way of creating knowledge]

(C)NISHIO Hirokazu / Converted from [Scrapbox] at [Edit]