zoukankan      html  css  js  c++  java
  • [矩阵树]luogu P4111 [HEOI2015]小 Z 的房间

    题面

    https://www.luogu.com.cn/problem/P4111

    分析

    矩阵树裸题

    一个连通图的生成树个数等于度数矩阵-邻接矩阵的矩阵的行列式

    消成上三角求斜对角即可

    代码

    #include <iostream>
    #include <cstdio>
    #include <cmath>
    using namespace std;
    typedef long long ll;
    const ll P=1e9;
    const int N=11;
    int n,m,id[N][N],idcnt;
    char s[N][N];
    ll ans=1,g[N*N][N*N];
    
    void Add(int u,int v) {g[u][u]++;g[v][v]++;g[u][v]--;g[v][u]--;}
    
    int main() {
        scanf("%d%d",&n,&m);
        for (int i=1;i<=n;i++) scanf("%s",s[i]+1);
        for (int i=1;i<=n;i++)
            for (int j=1;j<=m;j++)
                if (s[i][j]=='.') {
                    id[i][j]=++idcnt;
                    if (s[i-1][j]=='.') Add(id[i][j],id[i-1][j]);
                    if (s[i][j-1]=='.') Add(id[i][j],id[i][j-1]);
                }
        for (int i=1;i<idcnt;i++) {
            for (int j=i+1;j<idcnt;j++)
                while (g[j][i]) {
                    ll k=g[i][i]/g[j][i];
                    for (int l=i;l<idcnt;l++) (g[i][l]+=(P-g[j][l]*k%P))%=P;
                    swap(g[i],g[j]);ans*=-1;
                }
            (ans*=g[i][i])%=P;
        }
        printf("%lld
    ",(ans+P)%P);
    }
    View Code
    在日渐沉没的世界里,我发现了你。
  • 相关阅读:
    #include <utility>
    Html的空格显示
    ExtJs自学教程(1):一切从API開始
    天黑的时候,我又想起那首歌
    citrix协议ICA技术原理
    约瑟夫环问题
    数据结构和算法设计专题之---八大内部排序
    HDU
    深入分析C++引用
    八大排序算法总结
  • 原文地址:https://www.cnblogs.com/mastervan/p/14593845.html
Copyright © 2011-2022 走看看