1002: [FJOI2007]轮状病毒

Time Limit: 1 Sec  Memory Limit: 162 MB
Submit: 5577  Solved: 3031
[Submit][Status][Discuss]

Description

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

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

  现给定n(N<=100),编程计算有多少个不同的n轮状病毒

Input

  第一行有1个正整数n

Output

  计算出的不同的n轮状病毒数输出

Sample Input

3

Sample Output

16

HINT

Source

题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1002

关于基尔霍夫矩阵:

*算法引入:

*给定一个无向图G,求它生成树的个数t(G);


*


*算法思想:


*(1)G的度数矩阵D[G]是一个n*n的矩阵,并且满足:当i≠j时,dij=0;当i=j时,dij等于vi的度数;


*(2)G的邻接矩阵A[G]是一个n*n的矩阵,并且满足:如果vi,vj之间有边直接相连,则aij=1,否则为0;


*定义图G的Kirchhoff矩阵C[G]为C[G]=D[G]-A[G];


*Matrix-Tree定理:G的所有不同的生成树的个数等于其Kirchhoff矩阵C[G]任何一个n-1阶主子式的行列式的绝对值;


*所谓n-1阶主子式,就是对于r(1≤r≤n),将C[G]的第r行,第r列同时去掉后得到的新矩阵,用Cr[G]表示;

此题推出f[i]=(f[i-1]*3-f[i-2]+2)

下面给出AC代码:

 #include <bits/stdc++.h>
using namespace std;
typedef long long ll;
inline int read()
{
int x=,f=;
char ch=getchar();
while(ch<''||ch>'')
{
if(ch=='-')
f=-;
ch=getchar();
}
while(ch>=''&&ch<='')
{
x=x*+ch-'';
ch=getchar();
}
return x*f;
}
inline void write(int x)
{
if(x<)
{
putchar('-');
x=-x;
}
if(x>)
{
write(x/);
}
putchar(x%+'');
}
struct data
{
int a[],len;
};
int n;
data mul(data a,int k)
{
for(int i=;i<=a.len;i++)
a.a[i]*=k;
for(int i=;i<=a.len;i++)
{
a.a[i+]+=a.a[i]/;
a.a[i]%=;
}
if(a.a[a.len+]!=)
a.len++;
return a;
}
data sub(data a,data b)
{
a.a[]+=;
int j=;
while(a.a[j]>=)
{
a.a[j]%=;
a.a[j+]++;
j++;
}
for(int i=;i<=a.len;i++)
{
a.a[i]-=b.a[i];
if(a.a[i]<)
{
a.a[i]+=;
a.a[i+]--;
}
}
while(a.a[a.len]==)
a.len--;
return a;
}
int main()
{
data f[];f[].a[]=;f[].a[]=;
f[].len=f[].len=;
n=read();
for(int i=;i<=n;i++)
f[i]=sub(mul(f[i-],),f[i-]);
for(int i=f[n].len;i>;i--)
write(f[n].a[i]);
return ;
}

最新文章

  1. 怎么在MVC中使用自定义Membership
  2. Linux下的文件及文件后缀名
  3. AppStore下载失败使用已购页面再试一次解决方法
  4. 巧用translate设置元素垂直水平居中
  5. Ubuntu 14.04下安装功能强大的屏幕截图软件 Shutter
  6. myBatis实例
  7. 在Android项目中使用AndroidAnnotations(配置框架,显示Hello World!)
  8. Java GC专家系列1:理解Java垃圾回收
  9. 第三题 有如下Student&#160;对象, &#160;private&#160;String&#160;name;&#160;&#160; &#160;&#160;&#160;&#160;private&#160;int&#160;age;&#160;&#160; &#160;&#160;&#160;&#160;private&#160;int&#160;score;&#160;&#160; private&#160;String&#160;classNum;&#160; 其中,classNum&
  10. LeetCode Questions List (LeetCode 问题列表)- Java Solutions
  11. Android 开发笔记___SD卡文件操作
  12. hdu 4568 Hunter 最短路+dp
  13. bzoj4516 / P4070 [SDOI2016]生成魔咒
  14. C#USB设备枚举Kernel32的PInvoke
  15. word-break:break-all; 和 word-wrap:break-word 换行
  16. MapReduce求最大值最小值问题
  17. java 调用 oracle的function 和 procedure
  18. 利用Array Prototype的方法来实现对dom集合的筛选、indexOf、map等功能
  19. velocity.properties配置说明
  20. nginx 正则

热门文章

  1. 程序员的自我救赎---11.4:FileSystem文件服务
  2. Nginx 错误处理方法: bind() to 0.0.0.0:80 failed
  3. 安装MongoDB步骤
  4. MVCC的一些理解
  5. 2017双11海量数据下EagleEye的使命和挑战
  6. NodeJS初介
  7. flask入门篇
  8. 浅谈OGNL表达式
  9. Struts2-整理笔记(一)介绍、搭建、流程、详解struts.xml
  10. 浅谈JavaScript的面向对象程序设计(一)