zoukankan      html  css  js  c++  java
  • BZOJ2467 [中山市选2010]生成树

    Description

    有一种图形叫做五角形圈。一个五角形圈的中心有1个由n个顶点和n条边组成的圈。在中心的这个n边圈的每一条边同时也是某一个五角形的一条边,一共有n个不同的五角形。这些五角形只在五角形圈的中心的圈上有公共的顶点。如图0所示是一个4-五角形圈。
     
    现在给定一个n五角形圈,你的任务就是求出n五角形圈的不同生成树的数目。还记得什么是图的生成树吗?一个图的生成树是保留原图的所有顶点以及顶点的数目减去一这么多条边,从而生成的一棵树。
    注意:在给定的n五角形圈中所有顶点均视为不同的顶点。

    Input

    输入包含多组测试数据。第一行包含一个正整数T,表示测试数据数目。每组测试数据包含一个整数n( 2<=N<=100),代表你需要求解的五角形圈中心的边数。

     

    Output

    对每一组测试数据,输出一行包含一个整数x,表示n五角形圈的生成树数目模2007之后的结果。

    Sample Input

    1
    2

    Sample Output

    40
    矩阵树定理裸题
    不过数据再大一点也可以做,因为
    $ans_n=n*4*5^{n-1}$
     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cstring>
     4 #include<algorithm>
     5 #include<cmath>
     6 using namespace std;
     7 int n,cnt,a[501][501],ans,Mod=2007;
     8 void guass()
     9 {int i,j,k;
    10   n=cnt-1;
    11   ans=1;
    12   for (i=1;i<=n;i++)
    13     {
    14       for (j=1;j<=n;j++)
    15     {
    16       a[i][j]=(a[i][j]+Mod)%Mod;
    17     }
    18     }
    19   for (i=1;i<=n;i++)
    20     {
    21       for (j=i+1;j<=n;j++)
    22     {
    23       while (a[j][i])
    24         {
    25           int t=a[i][i]/a[j][i];
    26           for (k=i;k<=n;k++)
    27         {
    28           a[i][k]=(a[i][k]-1ll*t*a[j][k]%Mod+Mod)%Mod;
    29           swap(a[i][k],a[j][k]);
    30         }
    31           ans*=-1;
    32         }
    33     }
    34       ans=1ll*ans*a[i][i]%Mod;
    35     }
    36   ans=(ans+Mod)%Mod;
    37 }
    38 int main()
    39 {int i,j,T;
    40   cin>>T;
    41   while (T--)
    42     {
    43       cin>>n;cnt=0;
    44       memset(a,0,sizeof(a));
    45       for (i=1;i<=n-1;i++)
    46     {
    47       for (j=1;j<=4;j++)
    48         {
    49           ++cnt;
    50           a[cnt][cnt+1]--;a[cnt][cnt]++;
    51           a[cnt+1][cnt]--;a[cnt+1][cnt+1]++;
    52         }
    53       ++cnt;
    54       a[cnt][cnt-4]--;a[cnt][cnt]++;
    55       a[cnt-4][cnt]--;a[cnt-4][cnt-4]++;
    56       cnt--;
    57     }
    58       for (j=1;j<=3;j++)
    59     {
    60       ++cnt;
    61       a[cnt][cnt+1]--;a[cnt][cnt]++;
    62       a[cnt+1][cnt]--;a[cnt+1][cnt+1]++;
    63     }
    64       ++cnt;
    65       a[1][cnt]--;a[1][1]++;
    66       a[cnt][1]--;a[cnt][cnt]++;
    67       a[1][cnt-3]--;a[1][1]++;
    68       a[cnt-3][1]--;a[cnt-3][cnt-3]++;
    69       guass();
    70       cout<<ans<<endl;
    71     }
    72 }
  • 相关阅读:
    VS2010运行正常的控制台程序在VS2015中出现乱码的解决方法
    把博客园的博客导出为MovableType的文本格式
    2015年全年总结
    2015年第21本:万万没想到,用理工科思维理解世界
    2015年第20本:零秒思考
    参加2015年TOP100会议的零散笔记
    2015第19本:异类--不一样的成功启示录
    在IntelliJ IDEA14中安装go语言插件
    2015第18本:从0到1,ZERO to ONE, Notes on startups, or how to build the future
    2015第17本:脑力活化术
  • 原文地址:https://www.cnblogs.com/Y-E-T-I/p/8587093.html
Copyright © 2011-2022 走看看