zoukankan      html  css  js  c++  java
  • 生成树定理

    我在网上找了半天也没找到证明……,这里就简单介绍一下定理内容吧!

    生成树定理,顾名思义,就是用来计算一个简单无向图的生成树个数的,所以要假设一个简单无向图G,点数n,边数m。

    然后定义一个简单无向图G的度数矩阵D[G],它是n*n的矩阵,并且对于其中每一个元素,设该元素位于第i行第j列,均有:

      i==j时,该元素值为i或j的度数。

      i!=j时,该元素值为零。

    再定义一个邻接矩阵A[G],对于每一个元素(i,j),若点i和点j直接相连,则该元素值为1,否则为0。

    然后令C[G]=D[G]-A[G],再取[1,n]中任意一个数k,去掉矩阵C中第i行第i列,剩余一个(n-1)*(n-1)的行列式,该行列式的绝对值即为方案数。

    有一道栗题——SPOJ-HIGH Highways

    题面:自己找

    题解:啥也不说了,AC数++。

    代码:

     1 #include<cmath>
     2 #include<cstdio>
     3 #include<cstdlib>
     4 #include<cstring>
     5 #include<algorithm>
     6 #define N 502
     7 using namespace std;
     8 int T,n,m;
     9 double a[N][N];
    10 const double eps=1e-6;
    11 double gausswork()
    12 {
    13     int now=1;
    14     for(int i=1;i<n;i++)
    15     {
    16         int tmp=now;
    17         for(int j=now+1;j<n;j++)    if(abs(a[j][i])>abs(a[tmp][i]))    tmp=j;
    18         if(tmp!=now)    for(int j=1;j<n;j++)    swap(a[now][j],a[tmp][j]);
    19         if(abs(a[now][i])<eps)    return 0;
    20         for(int j=now+1;j<n;j++)
    21             if(j!=now)
    22             {
    23                 double tmp=a[j][i]/a[now][i];
    24                 for(int k=i;k<n;k++)    a[j][k]-=tmp*a[now][k];
    25             }
    26         now++;
    27     }
    28     double ret=1;
    29     for(int i=1;i<n;i++)    ret=ret*a[i][i];
    30     return abs(ret);
    31 }
    32 int main()
    33 {
    34     scanf("%d",&T);
    35     while(T--)
    36     {
    37         memset(a,0,sizeof(a));
    38         scanf("%d%d",&n,&m);
    39         for(int i=1,ui,vi;i<=m;i++)
    40         {
    41             scanf("%d%d",&ui,&vi);
    42             a[ui][ui]++,a[ui][vi]--;
    43             a[vi][vi]++,a[vi][ui]--;
    44         }
    45         printf("%.0lf
    ",gausswork());
    46     }
    47     return 0;
    48 }
    View Code
  • 相关阅读:
    【halcon】学习记录
    【QT】常用类
    【QT】宏
    机器视觉名词解释
    单元测试
    【MFC】VS2017新建完MFC后,没有界面,只有代码
    【MFC】学习与问题整合
    函数重载(overload)和函数重写(override)
    工作记录+反思
    【转】MapReduce:默认Counter的含义
  • 原文地址:https://www.cnblogs.com/stddddd/p/10356732.html
Copyright © 2011-2022 走看看