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

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

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

/**************************************************************
Problem: 1002
User: walfy
Language: Java
Result: Accepted
Time:1700 ms
Memory:24832 kb
****************************************************************/ import java.awt.List;
import java.math.BigInteger;
import java.sql.Date;
import java.util.*;
import java.util.Map.Entry; import javax.swing.text.html.HTMLDocument.Iterator; public class Main { static BigInteger [][] A = new BigInteger [100+10][100+10];
static BigInteger [] D = new BigInteger [100+10];
static void cal(int n)
{
BigInteger ans=BigInteger.valueOf(1);
for(int i=1;i<n;i++)
{
for(int j=i+1;j<n;j++)
{
while(!A[j][i].equals(BigInteger.valueOf(0))){
BigInteger t=A[i][i].divide(A[j][i]);
for(int k=i;k<n;k++)
A[i][k]=A[i][k].subtract(A[j][k].multiply(t));
for(int k=i;k<n;k++)
{
BigInteger te=A[i][k];
A[i][k]=A[j][k];
A[j][k]=te;
}
ans=ans.negate();
}
}
if(A[i][i]==BigInteger.valueOf(0))
{
System.out.println(0);
return ;
}
ans=ans.multiply(A[i][i]);
}
if(ans.compareTo(BigInteger.valueOf(0))<0)ans=ans.negate();
System.out.println(ans);
}
public static void main(String[] args) {
Scanner cin = new Scanner(System.in);
int n = cin.nextInt();n++;
if(n==3)
{
System.out.println("5");
return ;
}
for(int i=1;i<=n;i++)
{
D[i]=BigInteger.valueOf(0);
for(int j=1;j<=n;j++)
A[i][j]=BigInteger.valueOf(0);
}
for(int i=2;i<=n;i++)
{
if(i==n)
{
A[n][2]=BigInteger.valueOf(1);
A[2][n]=BigInteger.valueOf(1);
}
else
{
A[i][i+1]=BigInteger.valueOf(1);
A[i+1][i]=BigInteger.valueOf(1);
}
A[1][i]=BigInteger.valueOf(1);
A[i][1]=BigInteger.valueOf(1);
}
for(int i=1;i<=n;i++)
{
for(int j=i+1;j<=n;j++)
{
if(A[i][j].compareTo(BigInteger.ZERO)!=0)
{
D[i]=D[i].add(BigInteger.ONE);
D[j]=D[j].add(BigInteger.ONE);
}
}
}
// for(int i=1;i<=n;i++)System.out.println(D[i]);
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
if(i==j)A[i][j]=D[i];
else A[i][j]=A[i][j].negate();
}
}
// for(int i=1;i<=n;i++)
// {
// for(int j=1;j<=n;j++)
// System.out.print(A[i][j]+" ");
// System.out.println();
// }
cal(n);
}
}

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. 自适应Simpson公式

    参考刘汝佳<算法指南>P163 #include<cstdio> #include<cmath> double a; double F(double x){ +*a ...

  2. Java设计原则—依赖倒置原则(转)

    依赖倒置原则(Dependence Inversion Principle,DIP)的原始定义: 高层模块不应该依赖底层模块,两者都应该依赖其抽象: 抽象不应该依赖细节: 细节应该依赖抽象. 依赖倒置 ...

  3. hdu2825Wireless Password

    地址:http://acm.hdu.edu.cn/showproblem.php?pid=2825 题目: Wireless Password Time Limit: 2000/1000 MS (Ja ...

  4. POSIX 进程间通信 (可移植操作系统接口)

    1.什么是POSIX标准 Portable Operating System Interface for Computing System. 他是一个针对操作系统(准确地说是针对类Unix操作系统)的 ...

  5. webapi 版本控制

    一.问题 软件开发过程中,常常会需要变更以前的接口,添加或删除接口请求字段,接口字段校验.甚至是变更请求/返回字段名称,如果强制要求所有客户端跟着一起升级代价太大.如果接口从一开始就考虑到了版本的设计 ...

  6. 【Beginning Python】抽象(未完)

    [懒惰即是美德] 抽象意味着良好的可读性:说明你在努力做什么,而不是给出你正在如何做的细节. [抽象和结构] 程序应该是非常抽象的,就像“下载网页.计算频率.打印每个单词的频率”一样易懂.翻译成程序就 ...

  7. 20145328 《Java程序设计》实验一实验报告

    20145328 <Java程序设计>实验一实验报告 实验名称 Java开发环境的熟悉(Windows + IDEA) 实验内容 使用JDK编译.运行简单的Java程序: 使用IDEA 编 ...

  8. 20145331《Java程序设计》课程总结

    20145331<Java程序设计>课程总结 每周读书笔记链接汇总 •20145331<Java程序设计>第一周学习总结 •20145331<Java程序设计>第二 ...

  9. Tomcat热部署,Web工程中线程没有终止

    近期项目中,用 jenkins 热部署 web工程时,发现工程中静态持有的线程(将ScheduledExecutorService定时任务存储在静态Map中),导致不定时出现数据库访问事务关闭异常,如 ...

  10. creator cocos2d-js-min.js 文件廋身 变小 太大解决方法

    使用的 cocos creator 1.2 版本, 菜单栏 项目 -- 项目设置 -- 模块设置 里面 把不要的模块去掉