【BZOJ 4031】: [HEOI2015]小Z的房间
2024-10-20 08:26:13
题目大意:
给一个n×m的网格,“.”表示可联通,求该网格可构成的生成树个数在1E9的剩余系中的结果。(n,m<=9)
题解:
忘了删注释WA了两遍……
直接建图+MartrixTree定理即可。
代码:
#include "bits/stdc++.h" using namespace std; typedef long long ll; const int N=; ll a[N][N]; int n,mod=1e9; inline ll det(){
ll res=;
for(int i=;i<n;++i){
if(!a[i][i]){
bool flag=false;
for(int j=i+;j<n;++j){
if(a[j][i]){
flag=true;
for(int k=i;k<n;++k) swap(a[i][k],a[j][k]);
res=-res;
break;
}
}
if(!flag) return ;
}
for(int j=i+;j<n;++j){
while(a[j][i]){
ll 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;
swap(a[i][k],a[j][k]);
}
res=-res;
}
}
res*=a[i][i];
res%=mod;
}
if(res<) res+=mod;
return res;
} int main(){
int r,c;
scanf("%d%d",&r,&c);
char mp[][];
int s[][],xx[]={,,-,},
yy[]={,-,,};
memset(s,-,sizeof(s));
for(int i=;i<=r;++i)
scanf("%s",mp[i]+);
for(int i=;i<=r;++i)
for(int j=;j<=c;++j) if(mp[i][j]=='.')
s[i][j]=n++;
for(int i=;i<=r;++i)
for(int j=;j<=c;++j) if(s[i][j]!=-)
for(int k=;k<;++k){
int x=i+xx[k],y=j+yy[k];
if(x>&&y>&&x<=r&&y<=c){
if(s[x][y]!=-){
x=s[x][y],y=s[i][j];
a[x][y]=-,a[y][x]=-;
++a[y][y];
} }
}
--n;
printf("%lld\n",det());
}
最新文章
- Flux 普及读本
- php N 维数组的读取、设置、删除
- 图片Base64编码
- C#微信公众号接口开发,灵活利用网页授权、带参数二维码、模板消息,提升用户体验之完成用户绑定个人微信及验证码获取
- stm32cube--通用定时器--输入捕获
- Android表单UI及相应控件的事件处理
- cocos2d-x之首选项数据初试
- Good Bye 2013
- AngularJS~大话开篇
- Learning WCF Chapter 3 Bindings One-Way and Duplex Communication
- OpenGL ES 2.0 shader开发
- LR11关联问题
- 在word 2010中采用EndNote X7插入引用
- 利用FutureTask进行超时设置方法
- 2.3.3 Button(按钮)与ImageButton(图像按钮)
- python scrapy 调试模式
- http请求头中的Content-Type属性在angular 和 node中的用法
- 一、Mosquitto 介绍&;安装
- 20145312 实验二《 Java面向对象程序设计》
- poj1182 食物链 带权并查集
热门文章
- ionic1 sqlite的添加使用
- form表单提交转为可被 getModel(PROJECT.class ,null);接收
- IT轮子系列(二)——mvc API 说明文档的自动生成——Swagger的使用(一)
- Oracle官方文档学习路线图
- JSP指令与动作
- Visual Studio 2017 15.7 下的.NET Core
- python爬虫入门(八)Scrapy框架之CrawlSpider类
- jieba库词频统计练习
- ubuntu16+zabbix3.4+grafana环境搭建记录
- 树莓派配置watchdog