Hi everybody:
Remember that tomorrow will be this round in TopCoder. Here you have the link: http://community.topcoder.com/tc?module=MatchDetails&rd=15173 and registration will start at 09:00 AM EDT and the contest will start at 12:10 PM EDT. You can check the time for your country here: http://www.timeanddate.com/worldclock/fixedtime.html?&day=04&month=08&year=2012&hour=12&min=10&sec=0&p1=179. Have a nice contest!!!!
Как решать 1000?
Пусть мы знаем, сколько есть способов построить дерево с K крутыми(будем называть их так) фруктами для всех K. Тогда задача решается очевидным Meet-in-the-Middle. Научимся искать это число (назовем его f(K)).
Пусть у нас есть B горьких фруктов. Тогда построим граф, в котором вершины разделены на 3 типа: K вершин первого типа, B вершин второго и остальные — третьего. Проведем ребра между всеми парами вершин, кроме тех, в которых оба элемента пары принадлежат первому типу, либо один принадлежит первому, а второй — третьему. Найдем количество остовных деревьев в таком графе, посчитав соответствующий определитель (назовем это количество g(K)). Тогда посчитаем динамику:
.
Ну а дальше все просто.
I feel so unlucky. I've finished debugging my 1000ptr 4 minutes before the end of the coding phase. It works fine locally on Visual Studio, but gives wrong answer to the last sample on gcc. Probably, I have memory leak somewhere. Moreover, as far as I know, I'm not the only one with the same problem.