Сегодня (30.01.10) прошел второй отборочный раунд на ИОИП. Предлагаю здесь обсудить задачи.
№ | Пользователь | Рейтинг |
---|---|---|
1 | tourist | 3993 |
2 | jiangly | 3743 |
3 | orzdevinwang | 3707 |
4 | Radewoosh | 3627 |
5 | jqdai0815 | 3620 |
6 | Benq | 3564 |
7 | Kevin114514 | 3443 |
8 | ksun48 | 3434 |
9 | Rewinding | 3397 |
10 | Um_nik | 3396 |
Страны | Города | Организации | Всё → |
№ | Пользователь | Вклад |
---|---|---|
1 | cry | 167 |
2 | Um_nik | 163 |
3 | maomao90 | 162 |
3 | atcoder_official | 162 |
5 | adamant | 159 |
6 | -is-this-fft- | 158 |
7 | awoo | 155 |
8 | TheScrasse | 154 |
9 | Dominater069 | 153 |
10 | nor | 152 |
Название |
---|
Решение примерно такое:
Каждая вершина будет принадлежать какой-то сосне. Если это вершина, в которой другая сосна-ветка крепится к стволу, то эта вершина принадлежит стволу. Храним уровни всех вершин, изначально - нули. Будем удалять листы в порядке убывания уровня. Сначала все листы - сосны уровня 0, и при переходе в предков, уровень предков станет 1, потому что у 0-сосен нету ствола. При всех других переходах возможны два случая:
1. Переход из собственного ствола в него же. Т.е. все ветки текущей сосны уже удалены, или их не было, и сейчас алгоритм просто перемещается по стволу текущей сосны. Ясно, что уровень сосны менять не надо.
2. Переход из одной сосны в другую. Иногда будут переходы от одной сосны к сосне-родителю. В этом случае надо увеличить уровень сосны-родителя на 1.
Как узнавать какой случай сейчас рассматривается? Достаточно тривиально: если степень вершины-предка 2 или 1, то мы перемещаемся по стволу. Если степень вершины-предка 3 или больше, то это переход в сосну-родителя. Теперь просто обойдем в таком порядке все дерево и в итоге будет заполнен массив с уровнями сосен. Вывести максимум не составит труда.
Для решения, которое укладывается по времени можно использовать сбалансированное дерево поиска, которое хранит параметры которые нам нужны (первичный: степень вершины, вторичный: уровень вершины). Выбирая каждый раз минимум из дерева поиска, можно будет за логарифм изменить предка этой вершины-минимум и соответственно удалить саму вершину-минимум. И так, пока дерево не опустеет.
"Будем называть сосной нулевого уровня граф из двух вершин, соединенных ребром."
"Сосна k-го уровня представляет собой путь, который называется стволом, к некоторым вершинам которого прикреплены сосны уровней не больших k−1."
Не очевидно, но если обдумать, то становится понятно, что все вершины кроме одной - ствол, последняя - сосна-ветка. Основной упор стоит сделать на первую из двух цитат.
поллитрысорса не разбершьсяформула = (n*(n-1))/2*6+1
Дело в том, что при каждой i-ой оболочке прибавляется i*6 шестиугольников.
У меня клиента нет.
Вот тут неплохо объясняется.
Хотелось бы уточнить, правильно ли я думаю: просортировав по длине мы получаем очерёдность расположения пассажиров, а найдя количество течек пересечения временных отрезков отвечаем на первый пункт задачи. Так ли это?
т.е. ты на это сразу рассчитывал?? xD
java -jar Check.jar Check ...
если будешь победителем - добро пожаловать на все факультеты
2,3-ий диплом - ограничения на некоторые факультеты или допол. экзы