Java实现蓝桥杯G将军的示例代码

 更新时间:2020年02月10日 11:48:43   作者:南 墙  
这篇文章主要介绍了Java实现蓝桥杯G将军的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

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
样例说明
这四种方式分别是:

选1;
选2;
选3;
选2, 3。
样例输入2
7
1 1 2 2 3 3
样例输出2
40
数据规模与约定
对于20%的数据,n ≤ 20;
对于40%的数据,n ≤ 100;
对于100%的数据,1 ≤ n ≤ 100000。

资源约定:
峰值内存消耗(含虚拟机) < 256M
CPU消耗 < 2000ms

请严格按要求输出,不要画蛇添足地打印类似:“请您输入…” 的多余内容。

所有代码放在同一个源文件中,调试通过后,拷贝提交该源码。
注意:不要使用package语句。不要使用jdk1.7及以上版本的特性。
注意:主类的名字必须是:Main,否则按无效代码处理。

import java.util.ArrayList;
import java.util.Scanner;

public class Main {
  public static int n;
  public static int MOD = 10007;
  public static ArrayList<Integer>[] list;
  public static long[][] dp;
  
  public void dfs(int root) {
    dp[root][0] = 1;
    dp[root][1] = 1;
    for(int i = 0;i < list[root].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;
    }
  }
  
  @SuppressWarnings("unchecked")
  public static void main(String[] args) {
    Main test = new Main();
    Scanner in = new Scanner(System.in);
    n = in.nextInt();
    list = new ArrayList[n + 1];
    for(int i = 1;i <= n;i++)
      list[i] = new ArrayList<Integer>();
    for(int i = 2;i <= n;i++) {
      int father = in.nextInt();
      list[father].add(i);
    }
    dp = new long[n + 1][2];
    test.dfs(1);
    long result = (dp[1][0] + dp[1][1] - 1) % MOD;
    System.out.println(result);
  }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • Java中ArrayList集合的常用方法大全

    Java中ArrayList集合的常用方法大全

    这篇文章主要给大家介绍了关于Java中ArrayList集合的常用方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-01-01
  • Java 十大排序算法之归并排序刨析

    Java 十大排序算法之归并排序刨析

    归并排序是采用分治法的一个非常典型的应用。先使每个子序列有序,再使子序列段间有序,也就是将已有的子序列合并,得到完全有序的序列;如果将两个有序表合并成一个有序表,称为二路归并
    2021-11-11
  • Java序列化机制详解

    Java序列化机制详解

    Java 序列化机制是一种将对象转换为字节流的过程,以便在网络上传输或保存到文件中,并能在需要时将字节流还原为对象,这一机制通过实现 java.io.Serializable 接口来实现,同时涉及到一些关键概念和注意事项,需要的朋友可以参考下
    2023-12-12
  • 一篇文章带你了解JAVA面对对象应用

    一篇文章带你了解JAVA面对对象应用

    Java是一门面向对象的语言。对象是Java程序中的基本实体。除了对象之外Java程序同样处理基本数据。下面这篇文章主要给大家总结了关于Java中面向对象的知识点,需要的朋友可以参考借鉴,下面来一起看看吧
    2021-08-08
  • 详解spring cloud如何使用spring-test进行单元测试

    详解spring cloud如何使用spring-test进行单元测试

    这篇文章主要介绍了spring cloud如何使用spring-test进行单元测试,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-11-11
  • idea启动spring项目中文乱码的解决方法

    idea启动spring项目中文乱码的解决方法

    本文主要介绍了idea启动spring项目中文乱码,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-01-01
  • java double类型相加精度问题的解决

    java double类型相加精度问题的解决

    这篇文章主要介绍了java double类型相加精度问题的解决,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-01-01
  • Java实现图片旋转、指定图像大小和水平翻转

    Java实现图片旋转、指定图像大小和水平翻转

    这篇文章主要为大家详细介绍了Java实现图像旋转,指定图像大小,水平翻转图像,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-02-02
  • commons fileupload实现文件上传的实例代码

    commons fileupload实现文件上传的实例代码

    这篇文章主要介绍了commons fileupload实现文件上传的实例代码,包括文件上传的原理分析等相关知识点,本文给大家介绍的非常详细,具有参考借鉴价值,感兴趣的朋友一起看看吧
    2016-10-10
  • java 线程池存在的意义

    java 线程池存在的意义

    这篇文章主要介绍了java线程池存在的意义,通过多线程案例模拟锁的产生的情况展开对主题的详细介绍,具有一定的参考价值,需要的朋友可以参考一下
    2022-06-06

最新评论