• 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 }
  • 相关阅读:
    Spring Boot 2 快速教程:WebFlux Restful CRUD 实践(三)
    Spring Boot 2 快速教程:WebFlux 快速入门(二)
    ES 集群上,业务单点如何优化升级?
    Spring Boot 2.x 系列教程:WebFlux 系列教程大纲(一)
    泥瓦匠想做一个与众不同的技术"匠"
    java编程行业微信群,无论新手老手欢迎加入,会一直更新
    Spring Boot 2.x 系列教程:WebFlux REST API 全局异常处理 Error Handling
    解决方案:如何防止数据重复插入?
    阿里 Java 手册系列教程:为啥强制子类、父类变量名不同?
    品阿里 Java 开发手册有感
  • 原文地址:https://www.cnblogs.com/Y-E-T-I/p/8587093.html
Copyright © 2020-2023  润新知