На форумі обговорюються лише питання, пов'язані з олімпіадою
Ви не зайшли.
Пока первый тур не начался - порешаем задачки.
Народ помогите решить задачу! плз!
Меня не интересует код, я хочу знать идею или способ решения, правильного решения!
Большое спасибо! Жду...
условие задачи:
По заданному двоичному дереву найдите способ
распилить некоторые его ребра так, чтобы каждая из его частей
имела не более k вершин, а общее количество частей не превышало
(2*n/k). В первой строке n - количество вершин и k. Следующие n-1
строк описывают ребра дерева. Каждое описывается двумя номерами
вершин: номером родителя и номером ребенка. Корень дерева 1.
Вывести количество ребер, которые следует перепилить и эти ребра.
Пример
ввод: 5 2
1 2
1 5
5 3
5 4
Ввывод: 2
2 4
БОЛЬШОЕ СПАСИБО
Поза форумом
Первое, что приходит в голову - сделать динамику по дереву.
Количество частей в результате разреза дерева равняется числу разрезанных ребер + 1. То есть достаточно построить такой разрез, который минимизирует количество разрываемых ребер, и мы получим ответ к задаче.
Введем функцию f(v,sz), где v-вершина дерева, sz - количество вершин, которые в этом поддереве можно оставить соединенными с v.
тогда все зависит от того, сколько потомков у вершины v:
0. v-лист. Ничего разрезать точно не надо. f(v,sz)=0
1. у v есть 1 потомок. Значит можно либо разрезать ребро к потомку, либо не разрезать. f(v,sz)=min(f(chld[v],sz-1),f(chld[v],k)+1)
2 тут выходит 4 разных варианта.
- удалить оба ребра к детям. если сделать так, то в сумме в поддереве будет сделано f(left[v],k)+f(right[v],k)+2 разрезов.
- удалить только ребро к левому сыну. Тогда будет f(left[v],k)+f(right[v],sz-1)+1
- удалить только ребро к правому сыну. Тогда будет f(right[v],k)+f(left[v],sz-1)+1
- не удалять не одного из ребер. ответом для этого случая будет min(f(left[v],i)+f(right[v],sz-1-i)) по i от 1 до sz-2.
f(v,sz) будет равняться минимуму из этих 4 вариантов.
А имея посчитанную функцию f, восстановить удаленные ребра - это уже дело техники.
Поза форумом
Согласен на счет динамики по дереву но тут нужно знать ограничения. Если все норм то динамика это верный вариант однако часть подобных задач решается и жадным алгоритмом над этим стоит еще подумать
Відредаговано necro (2007-10-26 19:21:30)
Поза форумом
Про жадность - согласен. Это первое, что приходит в голову. Но очевидной и при этом правильной жадности я тут не вижу.
А динамика - железный способ.
Поза форумом
Подскажите пожалуйста! Учасниками олимпиады могут стать только школьники? Заранее спасибо
Поза форумом
Ні. Не школярі реєструються у категорії НЕ ШКОЛЯРІ
Поза форумом
Решил не создавать еще одну тему не по тематике форума
Вопрос к всем - Кто какие знает архивы задач с проверяющей системой и возможностью просматривать тесты.
Раньше был оч хороший проект ТТБ но уже мертвы не только конкурсы но и архив....(сегодня в надежде опять проверил)
Поза форумом
Усцака
Поза форумом
necro написав:
Усцака
не совсем понял, ето выражение эмоций или инет-проект с заданными характеристиками?)))
Поза форумом
Dark_Dimius написав:
necro написав:
Усцака
не совсем понял, ето выражение эмоций или инет-проект с заданными характеристиками?)))
Насколько я понимаю, имелся в виду Usaco :-)
Поза форумом
Skiminok написав:
Dark_Dimius написав:
necro написав:
Усцака
не совсем понял, ето выражение эмоций или инет-проект с заданными характеристиками?)))
Насколько я понимаю, имелся в виду Usaco :-)
+1 ттырррррррррррррр.....тыш в яболчко...
Поза форумом