你的房子可以看做是一个包含n*m个格子的格状矩形,每个格子是一个房间或者是一个柱子。在一开始的时候,相邻的格子之间都有墙隔着。
你想要打通一些相邻房间的墙,使得所有房间能够互相到达。在此过程中,你不能把房子给打穿,或者打通柱子(以及柱子旁边的墙)。同时,你不希望在房子中有小偷的时候会很难抓,所以你希望任意两个房间之间都只有一条通路。现在,你希望统计一共有多少种可行的方案。

  1. 矩阵树求生成树个数模板题
  2. 度数矩阵-邻接矩阵=拉普拉斯矩阵
  3. 求拉普拉斯矩阵的任意一个代数余子数即可
  1. #define int long long//记住这个骚操作!!!int->longlong范围懒得手动改。但是记得int main要写成signed main
  2. #define mod 1000000000
  3.  
  4. int tot;
  5. int dx[] = {, , , -};
  6. int dy[] = {, , -, };
  7. int f[N][N];
  8. char mp[N][N];
  9. int n, m;
  10. int id[N][N];
  11. int num = ;
  12.  
  13. int Gauss()
  14. {
  15.  
  16. int ans = ;
  17. for (int i = ; i < tot; i++)
  18. {
  19. for (int j = i + ; j < tot; j++)
  20. while (f[j][i])
  21. {
  22. int t = f[i][i] / f[j][i];
  23. for (int k = i; k < tot; k++)
  24. f[i][k] = (f[i][k] - t * f[j][k] + mod) % mod;
  25. swap(f[i], f[j]);
  26. ans = -ans;
  27. }
  28. ans = (ans * f[i][i]) % mod;
  29. }
  30. return (ans + mod) % mod;
  31. }
  32.  
  33. signed main()
  34. {
  35. sdf(n), sdf(m);
  36. for (int i = ; i <= n; i++)
  37. {
  38. char c;
  39. for (int j = ; j <= m; j++)
  40. {
  41. cin >> mp[i][j];
  42. if (mp[i][j] == '.')
  43. id[i][j] = ++tot;
  44. }
  45. }
  46.  
  47. For(x, , n)
  48. For(y, , m)
  49. For(k, , )
  50. {
  51. int tx = x + dx[k], ty = y + dy[k];
  52. if (tx < || ty < || tx > n || ty > m || mp[x][y] == '*')
  53. continue;
  54. if (mp[x][y] == mp[tx][ty])
  55. {
  56. f[id[x][y]][id[x][y]]++;
  57. f[id[x][y]][id[tx][ty]] = -;
  58. f[id[tx][ty]][id[x][y]] = -;
  59. }
  60. }
  61. printf("%lld\n", Gauss());
  62. return ;
  63. }

P4111 [HEOI2015]小Z的房间的更多相关文章

  1. P4111 [HEOI2015]小Z的房间 生成树计数

    这个题是生成树计数的裸题,中间构造基尔霍夫矩阵,然后构成行列式,再用高斯消元就行了.这里高斯消元有一些区别,交换两行行列式的值变号,且消元只能将一行的数 * k 之后加到别的行上. 剩下就没啥了... ...

  2. [洛谷P4111][HEOI2015]小Z的房间

    题目大意:有一个$n\times m$的房间,一些位置是房间,另一些位置是柱子,相邻两个房间之间有墙,问有多少种方案可以打通一些墙把所有房间连成一棵树,柱子不可以打通 题解:矩阵树定理,把房间当点,墙 ...

  3. p4111 [HEOI2015]小Z的房间[简述矩阵树定理]

    分析 [1]无向图 图G的度数矩阵为D,邻接矩阵为A 我们定义这个图的Kirchhoff矩阵为D-A 这个矩阵的任意一个n-1阶主子式的行列式的绝对值就是这个图的生成树个数 [2]有向图 如果要求内向 ...

  4. 题解 P4111 [HEOI2015]小 Z 的房间

    题解 题目大意:给定一个无向图,求它的生成树个数. 一道裸的矩阵树定理,外加一些建图的技巧. 矩阵树定理 对于一个 \(Laplace\) 矩阵,其去掉任意一行后的行列式即为答案. 行列式不会的看这里 ...

  5. bzoj 4031: [HEOI2015]小Z的房间 轮廓线dp

    4031: [HEOI2015]小Z的房间 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 98  Solved: 29[Submit][Status] ...

  6. [HEOI2015]小Z的房间 && [CQOI2018]社交网络

    今天看了一下矩阵树定理,然后学了一下\(O(n ^ 3)\)的方法求行列式. 哦对了,所有的证明我都没看-- 这位大佬讲的好呀: [学习笔记]高斯消元.行列式.Matrix-Tree 矩阵树定理 关于 ...

  7. 【bzoj4031】[HEOI2015]小Z的房间 解题报告

    [bzoj4031][HEOI2015]小Z的房间 Description 你突然有了一个大房子,房子里面有一些房间.事实上,你的房子可以看做是一个包含\(n*m\)个格子的格状矩形,每个格子是一个房 ...

  8. 【BZOJ 4031】 4031: [HEOI2015]小Z的房间 (Matrix-Tree Theorem)

    4031: [HEOI2015]小Z的房间 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 1089  Solved: 533 Description ...

  9. BZOJ 4031: [HEOI2015]小Z的房间 高斯消元 MartixTree定理 辗转相除法

    4031: [HEOI2015]小Z的房间 题目连接: http://www.lydsy.com/JudgeOnline/problem.php?id=4031 Description 你突然有了一个 ...

随机推荐

  1. blfs(systemd版本)学习笔记-编译安装openssh软件包

    我的邮箱地址:zytrenren@163.com欢迎大家交流学习纠错! openssh项目地址:http://www.linuxfromscratch.org/blfs/view/stable/pos ...

  2. linux学习笔记-grub模式引导进入系统

    我的邮箱地址:zytrenren@163.com欢迎大家交流学习纠错! 1.设置系统启动盘所在位置 set root='hd0,msdosx' 2.手动加载内核驱动程序并配置root目录位置 linu ...

  3. JMeter 集合点设置之Synchronizing Timer的使用

    集合点设置之Synchronizing Timer的使用 by:授客 QQ:1033553122 1.布局设置 注: 1) 说明: 名称:自定义名称 Number of Simulated Users ...

  4. 安卓开发_深入理解Handler消息传递机制

    一.概述 因为子线程的run()方法无法修改UI线程(主线程)的UI界面,所以Android引入了Handler消息传递机制,实现在新创建的线程中操作UI界面 二.消息类(Message) 消息类是存 ...

  5. Android basics

    只要是Android中的控件,最终都继承自View.

  6. LeetCode题解Maximum Binary Tree

    1.题目描述 2.分析 找出最大元素,然后分割数组调用. 3.代码 TreeNode* constructMaximumBinaryTree(vector<int>& nums) ...

  7. selenium获取cookie

    参考地址:https://www.cnblogs.com/lingwang3/p/7750156.html # 获取cookie import time from selenium import we ...

  8. 07-OpenLDAP密码审计

    OpenLDAP密码审计 阅读视图 密码审计的作用 操作实践 1. 密码审计的作用 开启密码审计的功能主要用于记录OpenLDAP用户修改密码,以及密码审计. 2. 操作实践 开启密码审计模块并配置密 ...

  9. Derek解读Bytom源码-持久化存储LevelDB

    作者:Derek 简介 Github地址:https://github.com/Bytom/bytom Gitee地址:https://gitee.com/BytomBlockchain/bytom ...

  10. [MapReduce_add_1] Windows 下开发 MapReduce 程序部署到集群

    0. 说明  Windows 下开发 MapReduce 程序部署到集群 1. 前提 在本地开发的时候保证 resource 中包含以下配置文件,从集群的配置文件中拷贝 在 resource 中新建  ...