蓝盟IT小贴士,来喽!
g将军有一支训练有素的军队,这支军队除了g将军,每个士兵都有直接的高手(也许是其他士兵,也许是g将军)。 目前,g将军需要接受特殊任务,派遣部分士兵(至少一人)组成决死队,为了提高运动员的独立性,要求一名士兵在队伍中,他的直属上司不能在队伍中。
对不起,g将军有什么方法派遣队伍? 注意g将军也可以作为士兵进入球队。
输入形式
输入的第一行包含整数n,表示包括g将军在内的军队人数。 军队士兵从1到n,g将军从1。
接下来的n-1个分别表示编号为2、3、n的士兵的直接上位编号,编号为I的士兵的直接上位编号小于I。
输出格式
输出表示派遣队计划数的整数。 因为数量可能很多,只要把这个数除以10007馀就行了。
样本输入1
3
1 1
样本输出1
4
样本说明
有四种方法
选一名
选择2
选择3
选两三个。
样本输入2
7
1 1 2 2 3 3
样本输出2
40
数据的规模和承诺
对于20%的数据,n≦20
对于40%的数据,n ≤ 100
对于100%的数据,1-n-10000。
资源规约:
峰值内存消耗量(包括虚拟机) 256M
CPU消耗2000ms
请按照要求输出。 请不要画蛇添加“请输入……”这样多馀的内容。
所有代码都存储在同一个源文件中,通过调试后复制并发送源代码。
注意:请勿使用package语句。 请勿使用jdk1.7或更高版本的功能。
注:主类的名称必须是“Main”。 否则,它将被无效代码处理。
import java.util.ArrayList;
import java.util.Scanner;
公共类主(公共静态int ); 公共静态int mod=10007; 公共静态阵列列表[ ] list; 公共状态长[ ] ] DP; 公共void fs ( int root ) { DP [ root ] [0]=1; dp[root][1]=1;
for(int i=0; I list [根].size ( ); i ) { int child=list[root].get(i ); DFS ( child ) DP [ root ] [0]=DP [ root ] [0] * ( DP [ child ] [0] DP [ child ] [1] ) % mod; DP [ root ] [1]=DP [ root ] [1] * DP [ child ] [0] % mod; }