• 【学习笔记】BEST定理


    • 害怕忘记简单写一点:
    • 无向图的生成树计数:https://www.cnblogs.com/zj75211/p/8039443.html   (*ZJ学长 ORZ )
    • 有向图的欧拉回路计数:https://blog.csdn.net/john123741/article/details/76586690
    • 连通图$G = (V,E)$,欧拉回路条数$ec(G)$,$t_{s}$为有向图以$s$为根的树(内或外)个数,;
    • 令$N_{x}(K)$为矩阵$K$去掉$x$阶的主子式,省略$x$表任意一阶,
    • 无向图的生成树:

    • 令$K = D - A$,D为度数矩阵,$A$为邻接矩阵;
    • 无向图生成树个数$t = det(N(K))$
    • 有向图的生成树:

    • 分内向(边由叶子指向根)和外向(由根指向叶子);
    • 外向树:$K = D - A$,$D$为入度矩阵,$A$为邻接矩阵;
    • $t_{s} = det(N_{s}(K))$;
    • 内向树:$K = D - A$,$D$为出度矩阵,$A$为邻接矩阵;
    • 同样有$t_{s} = det(N_{s}(K))$;
    • 有向图的欧拉回路:

    • 如果每个点出度和入度不相等为0;
    • $deg(u)$表示每个点的度数=出度=入度,以s为起点,$t_{s}$指外向树;
    • $ec_{s}(G) =    t_{s}    Pi_{u in V} (deg(u)-1)!$
    • 另外我发现其实这里的$t_{s}$的$s$可以换成任意点,也就是说有欧拉回路的图所有点的外向树个数都是一样的不知道对不对??
    • 如果边的环同构不算一种方案再乘上一个起点度数$deg(s)$;
    • 所以大家的式子会有些小差异就是因为这个;
    • 放一个裸题bzoj3659:
    •  1 #include<bits/stdc++.h>
       2 using namespace std;
       3 const int N=110,M=200010,mod=1000003;
       4 int n,m,fac[M],deg[N],a[N][N];
       5 int pw(int x,int y){
       6     int re=1;
       7     for(;y;y>>=1,x=1ll*x*x%mod){
       8         if(y&1)re=1ll*re*x%mod;
       9     }
      10     return re;
      11 }
      12 int gauss(){
      13     int fg=0,re=1;
      14     for(int i=1;i<n;++i){
      15         int pos=i;
      16         for(int j=i;j<n;++j)if(a[j][i]){
      17         pos=j;break;
      18         }
      19         if(pos!=i){
      20             fg^=1; 
      21             for(int j=i;j<n;++j)swap(a[i][j],a[pos][j]);
      22         }
      23         re=1ll*re*a[i][i]%mod;
      24         int tmp = pw(a[i][i],mod-2);
      25         for(int j=i;j<n;j++)a[i][j]=1ll*a[i][j]*tmp%mod;
      26         for(int j=i+1;j<n;++j)
      27         for(int k=n-1;k>=i;--k)a[j][k]=(a[j][k]-1ll*a[j][i]*a[i][k]%mod+mod)%mod;
      28     }
      29     if(fg)re=mod-re;
      30     return (re+mod)%mod;
      31 }
      32 int main(){
      33     freopen("bzoj3659.in","r",stdin);
      34     freopen("bzoj3659.out","w",stdout);
      35     for(int i=fac[0]=1;i<=2e5;++i)fac[i]=1ll*fac[i-1]*i%mod;
      36     while(~scanf("%d",&n)&&n){
      37         for(int i=1;i<=n;++i){
      38             for(int j=1;j<=n;++j)a[i][j]=0;
      39         }
      40         for(int i=1,s;i<=n;++i){
      41             scanf("%d",&s);
      42             deg[i]=s;
      43             for(int j=1,x;j<=s;++j){
      44                 scanf("%d",&x);
      45                 if(i!=x)a[i][x]--,a[i][i]++;
      46             }
      47         }
      48         if(n==1){printf("%d
      ",fac[deg[1]]);continue;}
      49         int ans = gauss();
      50         for(int i=1;i<=n;++i)ans=1ll*ans*fac[deg[i]-1]%mod;
      51         ans = 1ll * deg[1] * ans %mod;
      52         printf("%d
      ",ans);
      53     }
      54     return 0;
      55 }
      bzoj3659
    • 未完待续。。。。。。。。。。。。。。。。。。
  • 相关阅读:
    近来有客户要求用table显示一大串数据,由于滚动后就看不到表头,很不方便,所以想到这个效果。
    js如何取当前日期时间/格式为:yyyymmdd hh:mm:ss
    jdk源码分析 – Thread线程类源码分析
    Swing中的MVC
    编程生涯的一次思想总结
    怎样成为高手
    浅谈测试驱动开发(TDD)
    Java RMI之HelloWorld篇(EJB都是建立在rmi基础之上的)
    Swing框架之Model
    EJB 工作原理
  • 原文地址:https://www.cnblogs.com/Paul-Guderian/p/10294032.html
Copyright © 2020-2023  润新知