Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Интересные и занимательные задачи по программированию > Помогите решить задачу ACM


Автор: arcsupport 6.1.2012, 09:46
Постановка задачи:

1472. Марсианская армия

Марсиане много веков назад перешли на использование в военных действиях огромных человекоподобных роботов. В ходе нынешней кампании по завоеванию Луны вся марсианская армия размещается в штабе на Марсе, при этом каждый военный управляет из штаба по интернету действиями своего робота. В марсианской армии поддерживается строгая иерархия — у каждого военного, кроме генерала (генерал в армии всего один), есть непосредственный командир. По марсианскому уставу разрешено только общение командира с непосредственным подчинённым. Такое общение происходит по локальной сети штаба. Каждый военный имеет в штабе собственный компьютер; компьютеры пронумерованы числами от 1 до N, где N — численность марсианской армии. С давних пор повелось, что компьютер подчинённого имеет номер строго больше компьютера командира. Военные, кроме номера компьютера, характеризуются своей надёжностью — действительным числом: владелец компьютера i имеет надёжность Ai. Все на Марсе знают, что надёжность генерала равна 1, а надёжность рядовых (рядовые и только они на Марсе не имеют подчинённых) равна 0.

Наивно думать, что траффик внутри сети штаба ни во что не обходится военным. За каждый мегабайт траффика между i-м компьютером и компьютером командира владельца i-го компьютера главный марсианский провайдер требует плату в Ci золотых. Ситуацию осложняет то, что объём траффика между любой парой компьютеров в штабе является государственной тайной, и даже провайдеру он неизвестен. Провайдер поступает следующим образом: раз в месяц он присылает счёт, а военные сами вписывают в него траффик за месяц — неотрицательное число мегабайт. Пусть командир и подчинённый имеют компьютеры с номерами i и k соответственно. По договору с провайдером траффик по счёту между компьютерами i и k не должен быть меньше Ai–Ak. В начале нового месяца представителям провайдера известна иерархия чинов в марсианской армии и цены за мегабайт траффика, однако неизвестны Ai всех чинов, кроме генерала и рядовых, и уж, конечно, неизвестны заранее те суммы в мегабайтах, которые военные впишут в счёт. Хотелось бы знать, какое гарантированное количество золотых может получить провайдер.

Исходные данные

В первой строке записано целое число 2 ≤ N ≤ 100000 — численность армии. В следующих N–1 строках расположены пары целых чисел Ki, Ci — номер компьютера командира владельца i-го компьютера и стоимость мегабайта траффика между компьютерами i и Ki. 1 ≤ Ki < i ≤ N, 0 ≤ Ci ≤ 1000.

Результат

Выведите действительное число — минимальную сумму в золотых, которую может гарантировать себе провайдер. Число должно содержать ровно 2 знака после десятичной точки.

Что делать?

Автор: Silent 17.1.2012, 08:19
use DP, Luke!  smile 
у нас есть дерево, нужно найти максимальное значение Ai-Ak между узлами, например, динамическим программированием

Автор: arcsupport 17.1.2012, 09:09
Silent, не могли бы Вы поподробнее объяснить

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)