bzoj1002: [FJOI2007]轮状病毒 生成树计数
轮状病毒有很多变种,所有轮状病毒的变种都是从一个轮状基产生的。一个N轮状基由圆环上N个不同的基原子
和圆心处一个核原子构成的,2个原子之间的边表示这2个原子之间的信息通道。如下图所示
.png)
N轮状病毒的产生规律是在一个N轮状基中删去若干条边,使得各原子之间有唯一的信息通道,例如共有16个不
同的3轮状病毒,如下图所示
.png)
/**************************************************************
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]轮状病毒 生成树计数的更多相关文章
- [bzoj1002][FJOI2007 轮状病毒] (生成树计数+递推+高精度)
Description 轮状病毒有很多变种,所有轮状病毒的变种都是从一个轮状基产生的.一个N轮状基由圆环上N个不同的基原子和圆心处一个核原子构成的,2个原子之间的边表示这2个原子之间的信息通道.如下图 ...
- BZOJ1002 [FJOI2007]轮状病毒(最小生成树计数)
Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 7125 Solved: 3878[Submit][Status][Discuss] Descripti ...
- BZOJ1002 FJOI2007 轮状病毒 【基尔霍夫矩阵+高精度】
BZOJ1002 FJOI2007 轮状病毒 Description 轮状病毒有很多变种,所有轮状病毒的变种都是从一个轮状基产生的.一个N轮状基由圆环上N个不同的基原子和圆心处一个核原子构成的,2个原 ...
- [luogu2144][bzoj1002][FJOI2007]轮状病毒【高精度+斐波那契数列+基尔霍夫矩阵】
题目描述 轮状病毒有很多变种,所有轮状病毒的变种都是从一个轮状基产生的.一个N轮状基由圆环上N个不同的基原子和圆心处一个核原子构成的,2个原子之间的边表示这2个原子之间的信息通道.如下图所示 N轮状病 ...
- [bzoj1002][FJOI2007]轮状病毒_递推_高精度
轮状病毒 bzoj-1002 FJOI-2007 Description 轮状病毒有很多变种,所有轮状病毒的变种都是从一个轮状基产生的.一个N轮状基由圆环上N个不同的基原子和圆心处一个核原子构成的,2 ...
- bzoj1002: [FJOI2007]轮状病毒(基尔霍夫矩阵)
1002: [FJOI2007]轮状病毒 题目:传送门 题解: 决定开始板刷的第一题... 看到这题的时候想:这不就是求有多少种最小生成树的方式吗? 不会啊!!!%题解... 什么鬼?基尔霍夫矩阵?? ...
- [BZOJ1002] [FJOI2007] 轮状病毒 (数学)
Description 给定n(N<=100),编程计算有多少个不同的n轮状病毒. Input 第一行有1个正整数n. Output 将编程计算出的不同的n轮状病毒数输出 Sample Inpu ...
- BZOJ1002[FJOI2007]轮状病毒
Description 轮状病毒有很多变种,所有轮状病毒的变种都是从一个轮状基产生的.一个N轮状基由圆环上N个不同的基原子 和圆心处一个核原子构成的,2个原子之间的边表示这2个原子之间的信息通道.如下 ...
- BZOJ1002: [FJOI2007]轮状病毒 (DP)
标准做法似乎应该是计算生成树数量的基尔霍夫矩阵之类的.. 我看到的做法是一个神奇的高精度dp,当然以后这个blahblahblah矩阵还是要搞一下.. 参考(抄袭)网址 这个dp的原理就是把环 ...
随机推荐
- 【zabbix】自定义监控项key值
说明: zabbix自带的默认模版里包括了很多监控项,有时候为了满足业务需求,需要根据自己的监控项目自定义监控项,这里介绍一种自定义监控项的方式. 1,首先编写自定义监控脚本,本文以监控httpd进程 ...
- [Windows Powershell]-学习笔记(1)
Powershell 快捷键 Powershell的快捷键和cmd,linux中的shell,都比较像. ALT+F7 清除命令的历史记录 PgUp PgDn 显示当前会话的第 ...
- JDBC—DAO
一.JDBC 什么是JDBC?JAVA DataBase Connectivity (Java 数据库连接技术)由Java编写的一组类和接口组成,为各种类型的数据库提供统一的访问.JDBC的作用?一种 ...
- Mac Outlook邮箱MicrosoftExchange邮箱快满了,请减小邮箱大小。
这两天我的Mac电脑中的Exchange总是收到公司的邮箱发来的[存储空间不足的告警邮件] MicrosoftExchange329e71ec88ae4615bbc36ab6ce41109e@your ...
- C++命名规则(转)
如果想要有效的管理一个稍微复杂一点的体系,针对其中事物的一套统一.带层次结构.清晰明了的命名准则就是必不可少而且非常好用的工具. 活跃在生物学.化学.军队.监狱.黑社会.恐怖组织等各个领域内的大量有识 ...
- 照着官网来安装openstack pike之nova安装
nova组件安装分为控制节点和计算节点,还是先从控制节点安装 1.前提条件,数据库为nova创建库和账户密码来连接数据库 # mysql -u root -p MariaDB [(none)]> ...
- Linux简单编程学习心得
在Linux环境下简单编程学习心得 linux编程过程 在上周的<信息安全设计基础>的课程学习中学习到了在虚拟的linux环境下简单的编程.学习过程中接触到了vim.gcc和gcd在实验楼 ...
- Linux文件系统学习(一)之相关概念⭐⭐⭐
“一切皆是文件”是 Unix/Linux 的基本哲学之一.不仅普通的文件,目录.字符设备.块设备.套接字等在 Unix/Linux 中都是以文件被对待:它们虽然类型不同,但是对其提供的却是同一套操作界 ...
- linux-android(任务处理)
1.开辟任务内存 2.设置每个任务优先级 ,,
- python3执行js之pyexecjs
执行js的三种方法:1.阅读js代码,将之转成python2.找到js代码,用python第三方库执行相关代码 python2-pyv8 python3-pyexecjs3.用selenium驱动浏览 ...