• BZOJ 4894: 天赋 矩阵树定理


    code:

    #include <cstring>
    #include <cstdio>
    #include <algorithm>
    #define N 303   
    #define mod 1000000007         
    #define ll long long
    #define setIO(s) freopen(s".in","r",stdin)
    using namespace std; 
    char S[N];   
    int a[N][N],n;              
    int qpow(int x,int y)
    {
        int tmp=1;
        for(;y;y>>=1,x=(ll)x*x%mod)
            if(y&1) tmp=(ll)tmp*x%mod;   
        return tmp;
    }
    int INV(int x) { return qpow(x,mod-2); }
    int gauss()
    {
        int ans=1,i,j,k;    
        for(i=2;i<=n;++i)
        {
            k=i;
            for(j=i+1;j<=n;++j)  if(a[j][i]>a[k][i]) k=j;  
            if(k!=i) swap(a[i],a[k]),ans*=-1;   
            if(!a[i][i]) return 0;   
            int inv=INV(a[i][i]);       
            for(j=i+1;j<=n;++j)
            {
                int t=(ll)((ll)inv*a[j][i]%mod+mod)%mod;   
                for(k=i;k<=n;++k) a[j][k]=(ll)(a[j][k]%mod-(ll)t*a[i][k]%mod+mod)%mod;        
            }
        }
        if(ans<0) ans+=mod;    
        for(i=2;i<=n;++i) ans=(ll)((ll)ans*a[i][i]%mod+mod)%mod;   
        return ans;  
    }    
    int main()
    {
        // setIO("input");
        int i,j;
        scanf("%d",&n);  
        for(i=1;i<=n;++i) 
        {
            scanf("%s",S+1);   
            for(j=1;j<=n;++j)  
            {
                if(S[j]=='1') // i->j    
                {    
                    ++a[j][j];    
                    --a[i][j];     
                }                   
            }
        }
        printf("%d
    ",gauss());    
        return 0;
    }
    

      

  • 相关阅读:
    P站画师 GTZ taejune 精选4k插画壁纸
    点、向量与坐标系
    一些几何
    画直线算法 Line drawing algorithm
    DX11 学习大纲
    插值 Interpolation
    The History of Computer Graphics
    vue中的请求拦截响应
    Event loop
    小程序使用wx.navigateTo()跳转失败
  • 原文地址:https://www.cnblogs.com/guangheli/p/12256593.html
Copyright © 2020-2023  润新知