Есть n ящиков, пронумерованных 1-н . Каждый ящик заблокирован, так что его можно открыть только одним ключом соответствующего типа (также пронумерованным 1-n ). Эти ключи случайным образом разбросаны по блокам (один ящик может иметь любое количество ключей, один ключ может иметь любое количество дубликатов), а затем все ящики закрываются. Сокровище (пронумерованное 0 ) также было заперто во многих коробках.
Вы наняли слесаря, чтобы забрать все сокровища. Он взимает плату за каждую открытую им коробку. За открытие ящика, для которого ключ уже доступен, плата не взимается.
Ввод - это содержимое каждого поля. Вы можете выбрать формат ввода.
Выведите минимальную стоимость, необходимую для получения сокровищ.
Примечания
- Ваш алгоритм может занять много времени, но это не имеет значения.
- Самый короткий код выигрывает.
- Не нужно беспокоиться о неверном вводе.
Образец данных
Здесь строка i представляет ключи, присутствующие в блоке i .
вход
2 0
3
4 0
5 6 0
6
0
Выход
1
вход
2 0
3 0
4 0
6
5 0
Выход
3
вход
2 4 0
3 0
1 0
6
5 0
Выход
2
вход
1
3 4
2 6
5
Выход
0
[[1] [3 4] [] [] [2 6] [5]]или, может быть {{1},{3,4},{},{},{2,6},{5}}. Таким образом, большинство языков могут уменьшить чтение входных данных до чего-то тривиального i=eval(read())и сосредоточиться на забавной части задачи.