Устаревший код
Устаревший код
И снова Вы потеряли дни на рефакторинг кода, который вообще никогда не запускается. Достаточно - Ваше время лучше потратить на написание инструмента, который находит неиспользуемый код!
Ваше программное обеспечение разделено на пакеты и выполняемые файлы. Пакет - это набор методов. Выполняемые файлы - это пакеты, определяющие среди других методов только один метод с именем PROGRAM. Этот метод выполняется при запуске соответствующего выполняемого файла. Обычные пакеты не имеют метода с именем PROGRAM.
Каждый метод уникально идентифицируется комбинацией имен пакета и метода. Например. метод с идентификатором SuperGame::PROGRAM будет основным методом исполняемой SuperGame.
Для каждого метода в программном обеспечении Вам предоставляется список методов, непосредственно вызывающих его. Таким образом, Вы можете легко идентифицировать методы, которые никогда не вызываются из любого метода. Однако Ваша задача посложнее: необходимо найти неиспользуемые методы. Это методы, которые никогда не достигаются потоком управления какого-либо исполняемого файла в Вашем программном обеспечении.
Входные данные
Первая строка содержит целое число n (1 ≤ n ≤ 400) - количество методов в программном обеспечении.
Каждый метод описывается двумя строками, всего в 2 * n строках. Первая строка состоит из уникального идентификатора метода и ki
(0 ≤ ki
≤ n) - количества методов, непосредственно вызывающих этот метод. Вторая строка состоит из набора идентификаторов ki
этих вызывающих методов или пуста, если таких методов нет, то есть ki
= 0.
Идентификаторы метода состоят из имени пакета, за которым следует два двоеточия и имя метода, например Packagename::Methodname. Обе строки, пакет и имя метода содержат до 20 строчных, прописных символов или цифр (a-z, A-Z, 0-9).
Во входных данных будет указано ровно n различных идентификаторов методов.
Выходные данные
Строка, содержащая количество неиспользуемых методов в вашем программном обеспечении.
2 SuperGame::PROGRAM 0 HelpPackage::HelpFunction 2 HelpPackage::HelpFunction SuperGame::PROGRAM
0
2 Loop::CallA 1 Loop::CallB Loop::CallB 1 Loop::CallA
2