#include <ビット/ STDC ++ H>
使用して 名前空間STDを、
const int型 MAXN = 1505 ;
int型VIS [MAXN]。
ベクター < INT > E [MAXN]。
INT F [MAXN] [ 2 ]。
ボイド DFS(int型x)は
{
F [X] [ 1 ] = 1 。
F [X] [ 0 ] = 0 。
以下のために(int型 i = 0 ; iは、Eを<[X] .size(); iは++ )
{
int型 = Y E [X] [I]。
DFS(Y)。
F [X] [ 1 ] + =分([Y] [F 0 ]、F [Y] [ 1 ])。
F [X] [ 0 ] + = F [Y] [ 1 ]。
}
を返します。
}
int型のmain()
{
int型N;
一方、(scanf関数(" %dの"!、&N)= - 1 )
{
memsetの(VIS、0、はsizeof (VIS))。
以下のために(int型 i = 0 ; iがn <; iは、++は)
{
int型、B。
scanf関数("%d個(%d)は"、&、&B);
E [A] .clear();
用(INT J = 1 ; J <= Bと、J ++ )
{
int型、C。
scanf関数(" %のD "、&C)。
E [A] .push_back(C);
VIS [C] = 1 。
}
}
int型のルート;
以下のために(int型 i = 0 ; iがn <; iは++ )
{
場合(VIS [I] == 0 )
{
ルート= I;
破ります;
}
}
DFS(ルート)。
printf(" %Dを\ n "、分(F [ルート] [ 0 ]、F [ルート] [ 1 ]))。
}
}