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的原理就是把环 ...
随机推荐
- golang build error: syntax error: nested func not allowed
在笔记本中写了一个简易web程序,但是编译失败,提示“syntax error: nested func not allowed” . 不明白什么意思,幸好代码量小,原来是方法的末尾的“}”丢了! p ...
- PAT 1039 Course List for Student[难]
1039 Course List for Student (25 分) Zhejiang University has 40000 students and provides 2500 courses ...
- android 带CheckBox对话框
package com.example.dialog4; import android.os.Bundle;import android.app.Activity;import android.app ...
- javaScript动画1 offsetWidth、offsetLeft
offsetWidth和offsetHeight <!DOCTYPE html> <html lang="en"> <head> <met ...
- AB测试的需求
一.背景 涉及到的项目是 SDK, 用户量 几千万级别,需要调整的是 订单购买整个逻辑,已经发现了低概率问题,影响到的订单不到 0.001% ,但是每周总有几个用户向客服反馈问题.整个逻辑问题,在我入 ...
- Linux数据备份与恢复 dump、restore、dd命令
dump命令:备份分区.文件或目录 在Linux系统中 dump 命令是没有安装的,所以先安装一下 dump 命令,安装命令如下: [root@localhost -]# yum -y install ...
- 在Pycharm中配置Github
Pycharm是当前进行python开发,尤其是Django开发最好的IDE.GitHub是程序员的圣地,几乎人人都在用. 本文假设你对pycharm和github都有一定的了解,并且希望在pycha ...
- 基于Node.js的爬虫工具 – Node Crawler
Node Crawler的目标是成为最好的node.js爬虫工具,目前已经停止维护. 我们来抓取光合新知博客tech栏目中的文章信息.访问http://dev.guanghe.tv/category/ ...
- 20145215《Java程序设计》第二周学习总结
教材内容总结 类型.变量与运算符 *基本类型 整数(short.int.long) 字节(byte) 浮点数(float/double) 字符(char)将一个数字字母或者符号用单引号标识,字符串用双 ...
- 重新想,重新看——CSS3变形,过渡与动画②
本篇文章主要用来归纳总结CSS3变形属性. CSS3变形属性大致可以分为以下三个部分: 变形控制属性 2D变形函数 3D变形函数 下面将对其一一进行分析: 1.变形控制属性 所谓的变形控制属性主要指“ ...