Даден ви е пълен неориентиран граф с N върха. Всички ръбове освен K имат цена A. Тези K ръбове имат цена B и вие ги познавате (като списък от двойки). Каква е минималната цена от възел 0 до възел N - 1.
2 <= N <= 500k
0 <= K <= 500k
1 <= A, B <= 500k
Проблемът очевидно е, когато тези K ръбове струват повече от другите и възел 0 и възел N - 1 са свързани с K-ръб.
Dijkstra не работи. Дори съм пробвал нещо много подобно с BFS.
Step1: Let G(0) be the set of "good" adjacent nodes with node 0.
Step2: For each node in G(0):
compute G(node)
if G(node) contains N - 1
return step
else
add node to some queue
repeat step2 and increment step
Проблемът е, че това изразходва много време поради факта, че за всеки възел трябва да направите цикъл от 0 до N - 1, за да намерите "добрите" съседни възли.
Някой има ли по-добри идеи? Благодаря ти.
Редактиране: Ето връзка от състезанието на ACM: http://acm.ro/prob/probleme/B.pdf