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的原理就是把环 ...
随机推荐
- python3 爬虫之Pyquery的使用方法
安装 pip install pyquery 官方文档: https://pythonhosted.org/pyquery/ 初始化方式(四种) 1. 直接字符串 from pyquery impor ...
- PHP压缩与解压Zip(PHPZip类)
<?php class PHPZip { private $ctrl_dir = array(); private $datasec ...
- Get started on your own KD 8 custom colorway
The 2009 Summer time Nike Basketball revealed the Cheap KD 8 and revealed three MVP-inspired colors ...
- java反射之构造方法(三)
一. 1. 二.获取类的构造方法信息. ######################################################################## 三.
- HDU 1116 Play on Words(欧拉路径(回路))
http://acm.hdu.edu.cn/showproblem.php?pid=1116 题意:判断n个单词是否可以相连成一条链或一个环,两个单词可以相连的条件是 前一个单词的最后一个字母和后一个 ...
- MYSQL基本操作总结
(1)cd c:/ //进入c:\-> (2)mysql -h 127.0.0.1 -u root -p //进入数据库 SHOW DATABASES; //显示所有数据库 CREATE DAT ...
- 20145327实验三 敏捷开发与XP实践
敏捷开发与XP实践 实验内容 XP基础 XP核心实践 相关工具 程序缩进: 结对git的应用 PSP 步骤 耗时 百分比 需求分析 15m 12.5% 设计 30m 25% 代码实现 45m 37.5 ...
- mysql字符串分割操作
SELECT '1,2,3,4,5,6,7,8' FROM dual; -- 列转行分割 ),) FROM () a JOIN mysql.help_topic b ); -- 测试 ),) as p ...
- static变量、static方法之间的异同
private SchemeBean getEmptyScheme() { SchemeBean scheme = new SchemeBean(); scheme ...
- ASP.NET OAuth Authorization - Difference between using ClientId and Secret and Username and Password
What I don't fully understand is the use of ClientId and Secret vs Username and Password. The code ...