• P4111 [HEOI2015]小Z的房间


    思路

    矩阵树定理的板子
    注意不要把不会出现在生成树中的点放进矩阵中
    然后消元要迭代的消,要注意返回值可能有负数

    代码

    #include <cstdio>
    #include <algorithm>
    #include <cstring>
    #define int long long
    using namespace std;
    const int MOD = 1000000000;
    int n,m,a[110][110],N,map[10][10];
    char mat[10][10];
    const int mx[]={0,-1,1,0},my[]={1,0,0,-1};
    int guass(void){
    	int ans=1;
    	for(int i=1;i<N;i++){
    		for(int j=i+1;j<N;j++){
    			while(a[j][i]){
    				int t=a[i][i]/a[j][i];
    				for(int k=i;k<N;k++)
    					a[i][k]=(a[i][k]-t*a[j][k]+MOD)%MOD;
    				for(int k=1;k<N;k++)
    					swap(a[i][k],a[j][k]);
    				ans*=-1;
    			}
    		}
    		ans=(ans*a[i][i]+MOD)%MOD;
    	}
    	return (ans%MOD+MOD)%MOD;
    }
    signed main(){
    	scanf("%lld %lld",&n,&m);
    	for(int i=1;i<=n;i++){
    		scanf("%s",mat[i]+1);
    		for(int j=1;j<=m;j++)
    			if(mat[i][j]=='.')
    				map[i][j]=++N;
    	}	
    	for(int i=1;i<=n;i++){
    		for(int j=1;j<=m;j++){
    			for(int k=0;k<4;k++){
    				if(!map[i][j])
    					continue;
    				int tx=i+mx[k],ty=j+my[k];
    				if(tx<1||tx>n||ty<1||ty>m)
    					continue;
    				if(map[tx][ty]){
    					a[map[i][j]][map[i][j]]++;
    					a[map[i][j]][map[tx][ty]]--;
    				}
    			}
    		}
    	}
    	printf("%lld
    ",guass());
    	return 0;
    }
    
  • 相关阅读:
    如何为Android写一个PhoneGap插件
    Javascript高性能动画与页面渲染
    jquery mobile Popup
    android学习资料免费下载
    锋利的jquery第2版高清 pdf
    android获取sd卡最后一张照片
    mongodb 基础
    django 实现读写分离
    docker 部署django方式
    mysql 主从读写
  • 原文地址:https://www.cnblogs.com/dreagonm/p/10519692.html
Copyright © 2020-2023  润新知