BZOJ 1002 轮状病毒(生成树个数)

题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=1002

题意:求下面这种造型的生成树的个数。

思路:生成树的个数可以用那个矩阵
A:A[i][i]等于i的度数,A[i][j]等于i到j的边数的相反数。那么A的任意一个n-1阶的行列式(就是删掉任意一行一列)就是生成树的个
数。但是这里有一个递推公式,暴力完前几项可以找出这个,f[n]=3*f[n-1]-f[n-2]+2。

import java.util.*;
import java.text.*;
import java.math.*;

public class Main{

    public static void PR(String s){
        System.out.println(s);
    }

    public static void PR(int x)
    {
        System.out.println(x);
    }

      public static void PR(BigInteger x)
    {
        System.out.println(x);
    }

    public static void PR(double s)
    {
        java.text.DecimalFormat d=new java.text.DecimalFormat("#.000000");
        System.out.println(d.format(s));
    }

    static BigInteger a,b,c;
    static int n;

    public static void main(String[] args){

        Scanner S=new Scanner(System.in);
        while(S.hasNext())
        {
            n=S.nextInt();
            a=BigInteger.ONE;
            b=BigInteger.valueOf(5);
            int i;
            if(n==1) PR(a);
            else if(n==2) PR(b);
            else
            {
                for(i=3;i<=n;i++)
                {
                    c=b.multiply(BigInteger.valueOf(3));
                    c=c.subtract(a).add(BigInteger.valueOf(2));
                    a=b;
                    b=c;
                }
                PR(c);
            }
        }
    }
}

BZOJ 1002 轮状病毒(生成树个数),布布扣,bubuko.com

时间: 2024-11-05 14:36:49

BZOJ 1002 轮状病毒(生成树个数)的相关文章

BZOJ 1002 轮状病毒

Description 给定n(N<=100),编程计算有多少个不同的n轮状病毒. Input 第一行有1个正整数n. Output 将编程计算出的不同的n轮状病毒数输出 Sample Input 3 Sample Output 16 两种做法: 1.基尔霍夫矩阵+高斯消元暴搓 2.根据基尔霍夫矩阵推出推出递推公式推出f[i]=(f[i-2]*3-f[i-1]+2).(解释见:http://vfleaking.blog.163.com/blog/static/174807634201196851

bzoj 1002 [FJOI2007]轮状病毒 高精度&amp;&amp;找规律&amp;&amp;基尔霍夫矩阵

1002: [FJOI2007]轮状病毒 Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 2234  Solved: 1227[Submit][Status] Description 给定n(N<=100),编程计算有多少个不同的n轮状病毒. Input 第一行有1个正整数n. Output 将编程计算出的不同的n轮状病毒数输出 Sample Input 3 Sample Output 16 HINT Source 基尔霍夫矩阵总算编出来了,这道题考

BZOJ 1002 + SPOJ 104 基尔霍夫矩阵 + 一个递推式。

BZOJ 1002 高精度 + 递推 f[1] = 1; f[2] = 5; f[i] = f[i - 1] * 3 - f[i - 2] + 2; SPOJ 104 裸 + 不用Mod 1 #include <cstdio> 2 #include <cstring> 3 #include <cstdlib> 4 #include <algorithm> 5 #include <iostream> 6 7 using namespace std;

BZOJ 1002 [FJOI2007]轮状病毒

1002: [FJOI2007]轮状病毒 Description 轮状病毒有很多变种,所有轮状病毒的变种都是从一个轮状基产生的.一个N轮状基由圆环上N个不同的基原子和圆心处一个核原子构成的,2个原子之间的边表示这2个原子之间的信息通道.如下图所示 N轮状病毒的产生规律是在一个N轮状基中删去若干条边,使得各原子之间有唯一的信息通道,例如共有16个不同的3轮状病毒,如下图所示 现给定n(N<=100),编程计算有多少个不同的n轮状病毒 Input 第一行有1个正整数n Output 计算出的不同的n

[BZOJ 1002] [FJOI 2007] 轮状病毒

1002: [FJOI2007]轮状病毒 Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 3045  Solved: 1687[Submit][Status][Discuss] Description 给定n(N<=100),编程计算有多少个不同的n轮状病毒. Input 第一行有1个正整数n. Output 将编程计算出的不同的n轮状病毒数输出 Sample Input 3 Sample Output 16 [题解] 我就一个蒟蒻写什么题解呢= =

【递推】【高精度】【FJOI 2007】【bzoj 1002】轮状病毒

1002: [FJOI2007]轮状病毒 Time Limit: 1 Sec Memory Limit: 162 MB Submit: 3238 Solved: 1797 Description 给定n(N<=100),编程计算有多少个不同的n轮状病毒. Input 第一行有1个正整数n. Output 将编程计算出的不同的n轮状病毒数输出 Sample Input 3 Sample Output 16 题解: 递推. 打表可以找规律得,f[i]=3*f[i-1]-f[i-2]+2,但是需要高精

BZOJ 1002: [FJOI2007]轮状病毒 递推/基尔霍夫矩阵树定理

f[n]=3*f[n-1]-f[n-2]+2 1002: [FJOI2007]轮状病毒 Time Limit: 1 Sec  Memory Limit: 162 MB Submit: 2959  Solved: 1644 [Submit][Status][Discuss] Description 给定n(N<=100),编程计算有多少个不同的n轮状病毒. Input 第一行有1个正整数n. Output 将编程计算出的不同的n轮状病毒数输出 Sample Input 3 Sample Outpu

BZOJ 1002 FJOI2007 轮状病毒 递推+高精度

题目大意:轮状病毒基定义如图.求有多少n轮状病毒 这个递推实在是不会--所以我选择了打表找规律 首先执行下面程序 #include<cstdio> #include<cstring> #include<iostream> #include<algorithm> #define M 110 using namespace std; struct abcd{ int to,next; bool ban; }table[M<<2]; int head[

BZOJ 1002 FJOI 2007 轮状病毒 暴力+找规律+高精度

题目大意: 思路:基尔霍夫矩阵求生成树个数,不会. 但是可以暴力打表.(我才不会说我调试force调试了20分钟... CODE(force.cc): #include <cstdio> #include <cstring> #include <iostream> #include <algorithm> #define MAX 1000 using namespace std; struct Edge{ int x,y; Edge(int _,int __