轮状病毒有很多变种,所有轮状病毒的变种都是从一个轮状基产生的。一个N轮状基由圆环上N个不同的基原子
和圆心处一个核原子构成的,2个原子之间的边表示这2个原子之间的信息通道。如下图所示

  N轮状病毒的产生规律是在一个N轮状基中删去若干条边,使得各原子之间有唯一的信息通道,例如共有16个不
同的3轮状病毒,如下图所示

  现给定n(N<=100),编程计算有多少个不同的n轮状病毒
裸的生成树计数,需要高精,同时需要特判2的重边情况

  1. /**************************************************************
  2. Problem: 1002
  3. User: walfy
  4. Language: Java
  5. Result: Accepted
  6. Time:1700 ms
  7. Memory:24832 kb
  8. ****************************************************************/
  9.  
  10. import java.awt.List;
  11. import java.math.BigInteger;
  12. import java.sql.Date;
  13. import java.util.*;
  14. import java.util.Map.Entry;
  15.  
  16. import javax.swing.text.html.HTMLDocument.Iterator;
  17.  
  18. public class Main {
  19.  
  20. static BigInteger [][] A = new BigInteger [100+10][100+10];
  21. static BigInteger [] D = new BigInteger [100+10];
  22. static void cal(int n)
  23. {
  24. BigInteger ans=BigInteger.valueOf(1);
  25. for(int i=1;i<n;i++)
  26. {
  27. for(int j=i+1;j<n;j++)
  28. {
  29. while(!A[j][i].equals(BigInteger.valueOf(0))){
  30. BigInteger t=A[i][i].divide(A[j][i]);
  31. for(int k=i;k<n;k++)
  32. A[i][k]=A[i][k].subtract(A[j][k].multiply(t));
  33. for(int k=i;k<n;k++)
  34. {
  35. BigInteger te=A[i][k];
  36. A[i][k]=A[j][k];
  37. A[j][k]=te;
  38. }
  39. ans=ans.negate();
  40. }
  41. }
  42. if(A[i][i]==BigInteger.valueOf(0))
  43. {
  44. System.out.println(0);
  45. return ;
  46. }
  47. ans=ans.multiply(A[i][i]);
  48. }
  49. if(ans.compareTo(BigInteger.valueOf(0))<0)ans=ans.negate();
  50. System.out.println(ans);
  51. }
  52. public static void main(String[] args) {
  53. Scanner cin = new Scanner(System.in);
  54. int n = cin.nextInt();n++;
  55. if(n==3)
  56. {
  57. System.out.println("5");
  58. return ;
  59. }
  60. for(int i=1;i<=n;i++)
  61. {
  62. D[i]=BigInteger.valueOf(0);
  63. for(int j=1;j<=n;j++)
  64. A[i][j]=BigInteger.valueOf(0);
  65. }
  66. for(int i=2;i<=n;i++)
  67. {
  68. if(i==n)
  69. {
  70. A[n][2]=BigInteger.valueOf(1);
  71. A[2][n]=BigInteger.valueOf(1);
  72. }
  73. else
  74. {
  75. A[i][i+1]=BigInteger.valueOf(1);
  76. A[i+1][i]=BigInteger.valueOf(1);
  77. }
  78. A[1][i]=BigInteger.valueOf(1);
  79. A[i][1]=BigInteger.valueOf(1);
  80. }
  81. for(int i=1;i<=n;i++)
  82. {
  83. for(int j=i+1;j<=n;j++)
  84. {
  85. if(A[i][j].compareTo(BigInteger.ZERO)!=0)
  86. {
  87. D[i]=D[i].add(BigInteger.ONE);
  88. D[j]=D[j].add(BigInteger.ONE);
  89. }
  90. }
  91. }
  92. // for(int i=1;i<=n;i++)System.out.println(D[i]);
  93. for(int i=1;i<=n;i++)
  94. {
  95. for(int j=1;j<=n;j++)
  96. {
  97. if(i==j)A[i][j]=D[i];
  98. else A[i][j]=A[i][j].negate();
  99. }
  100. }
  101. // for(int i=1;i<=n;i++)
  102. // {
  103. // for(int j=1;j<=n;j++)
  104. // System.out.print(A[i][j]+" ");
  105. // System.out.println();
  106. // }
  107. cal(n);
  108. }
  109. }

bzoj1002: [FJOI2007]轮状病毒 生成树计数的更多相关文章

  1. [bzoj1002][FJOI2007 轮状病毒] (生成树计数+递推+高精度)

    Description 轮状病毒有很多变种,所有轮状病毒的变种都是从一个轮状基产生的.一个N轮状基由圆环上N个不同的基原子和圆心处一个核原子构成的,2个原子之间的边表示这2个原子之间的信息通道.如下图 ...

  2. BZOJ1002 [FJOI2007]轮状病毒(最小生成树计数)

    Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 7125  Solved: 3878[Submit][Status][Discuss] Descripti ...

  3. BZOJ1002 FJOI2007 轮状病毒 【基尔霍夫矩阵+高精度】

    BZOJ1002 FJOI2007 轮状病毒 Description 轮状病毒有很多变种,所有轮状病毒的变种都是从一个轮状基产生的.一个N轮状基由圆环上N个不同的基原子和圆心处一个核原子构成的,2个原 ...

  4. [luogu2144][bzoj1002][FJOI2007]轮状病毒【高精度+斐波那契数列+基尔霍夫矩阵】

    题目描述 轮状病毒有很多变种,所有轮状病毒的变种都是从一个轮状基产生的.一个N轮状基由圆环上N个不同的基原子和圆心处一个核原子构成的,2个原子之间的边表示这2个原子之间的信息通道.如下图所示 N轮状病 ...

  5. [bzoj1002][FJOI2007]轮状病毒_递推_高精度

    轮状病毒 bzoj-1002 FJOI-2007 Description 轮状病毒有很多变种,所有轮状病毒的变种都是从一个轮状基产生的.一个N轮状基由圆环上N个不同的基原子和圆心处一个核原子构成的,2 ...

  6. bzoj1002: [FJOI2007]轮状病毒(基尔霍夫矩阵)

    1002: [FJOI2007]轮状病毒 题目:传送门 题解: 决定开始板刷的第一题... 看到这题的时候想:这不就是求有多少种最小生成树的方式吗? 不会啊!!!%题解... 什么鬼?基尔霍夫矩阵?? ...

  7. [BZOJ1002] [FJOI2007] 轮状病毒 (数学)

    Description 给定n(N<=100),编程计算有多少个不同的n轮状病毒. Input 第一行有1个正整数n. Output 将编程计算出的不同的n轮状病毒数输出 Sample Inpu ...

  8. BZOJ1002[FJOI2007]轮状病毒

    Description 轮状病毒有很多变种,所有轮状病毒的变种都是从一个轮状基产生的.一个N轮状基由圆环上N个不同的基原子 和圆心处一个核原子构成的,2个原子之间的边表示这2个原子之间的信息通道.如下 ...

  9. BZOJ1002: [FJOI2007]轮状病毒 (DP)

    标准做法似乎应该是计算生成树数量的基尔霍夫矩阵之类的.. 我看到的做法是一个神奇的高精度dp,当然以后这个blahblahblah矩阵还是要搞一下..   参考(抄袭)网址   这个dp的原理就是把环 ...

随机推荐

  1. golang build error: syntax error: nested func not allowed

    在笔记本中写了一个简易web程序,但是编译失败,提示“syntax error: nested func not allowed” . 不明白什么意思,幸好代码量小,原来是方法的末尾的“}”丢了! p ...

  2. PAT 1039 Course List for Student[难]

    1039 Course List for Student (25 分) Zhejiang University has 40000 students and provides 2500 courses ...

  3. android 带CheckBox对话框

    package com.example.dialog4; import android.os.Bundle;import android.app.Activity;import android.app ...

  4. javaScript动画1 offsetWidth、offsetLeft

    offsetWidth和offsetHeight <!DOCTYPE html> <html lang="en"> <head> <met ...

  5. AB测试的需求

    一.背景 涉及到的项目是 SDK, 用户量 几千万级别,需要调整的是 订单购买整个逻辑,已经发现了低概率问题,影响到的订单不到 0.001% ,但是每周总有几个用户向客服反馈问题.整个逻辑问题,在我入 ...

  6. Linux数据备份与恢复 dump、restore、dd命令

    dump命令:备份分区.文件或目录 在Linux系统中 dump 命令是没有安装的,所以先安装一下 dump 命令,安装命令如下: [root@localhost -]# yum -y install ...

  7. 在Pycharm中配置Github

    Pycharm是当前进行python开发,尤其是Django开发最好的IDE.GitHub是程序员的圣地,几乎人人都在用. 本文假设你对pycharm和github都有一定的了解,并且希望在pycha ...

  8. 基于Node.js的爬虫工具 – Node Crawler

    Node Crawler的目标是成为最好的node.js爬虫工具,目前已经停止维护. 我们来抓取光合新知博客tech栏目中的文章信息.访问http://dev.guanghe.tv/category/ ...

  9. 20145215《Java程序设计》第二周学习总结

    教材内容总结 类型.变量与运算符 *基本类型 整数(short.int.long) 字节(byte) 浮点数(float/double) 字符(char)将一个数字字母或者符号用单引号标识,字符串用双 ...

  10. 重新想,重新看——CSS3变形,过渡与动画②

    本篇文章主要用来归纳总结CSS3变形属性. CSS3变形属性大致可以分为以下三个部分: 变形控制属性 2D变形函数 3D变形函数 下面将对其一一进行分析: 1.变形控制属性 所谓的变形控制属性主要指“ ...