Некоторый завод умеет производить N=100000 различных видов деталей. В каталоге деталей, которые могут быть произведены на этом заводе, все они пронумерованы числами от 1 до N
. При этом для производства некоторых деталей сначала нужно произвести какие-то другие детали. При этом детали «не расходуются», например, если для производства детали номер 6 нужны детали номер 7 и 8, а для производства детали номер 7 также нужна деталь номер 8, то для производства детали номер 6 нужно произвести детали номер 8, 7, 6 (деталь номер 8 будет использована и для производства детали номер 7, и для производства детали номер 6) по одному разу. То есть каждую деталь из каталога нужно произвести не более одного раза, или вообще можно не производить, если она не требуется.
Необходимо произвести деталь номер 1. Определите, какое наименьшее число деталей (суммарно, включая саму деталь номер 1) нужно произвести для этого, с учетом всех необходимых зависимостей.
Входные данные
Первая строка входных данных содержит число n
, (1≤n≤100000). Каждая из последующих n строк входного файла описывает характеристики производства деталей. Здесь i-я строка содержит список деталей, которые требуются для производства детали с номером i
. В списке нет повторяющихся номеров деталей. Список может быть пустым: тогда ему будет соответствовать пустая строка!
Суммарно во всех списках содержится не более 200000 элементов. Гарантируется, что не существует циклических зависимостей в производстве деталей.
Выходные данные
Программа должна вывести одно натуральное число — минимальное количество деталей, которые должен произвести завод для производства детали номер 1.
ПРИМЕР
ввод
6
3 6
4
2 6
4
вывод
4
Для производства детали 1 нужны детали 3 и 6, каждая из них требует для производства деталь 4. Итого нужно произвести 4 детали (1, 3, 6, 4), детали 2 и 5 производить не нужно.
def do(n):
global k, tot
tot.append(n)
k += 1
for i in range(len(arr[n-1])):
if arr[n-1][i] in tot:
pass
else:
do(arr[n-1][i])
tot = []
k = 0
n = int(input())
arr = [0]*n
for i in range(n):
arr[i] = list(map(int,input().split()))
do(1)
print(k)
Partial Solution. Your score is = 24, 24/29 tests passed
Какие тесты не подходят?