【BZOJ4596】【Luogu P4336】 [SHOI2016]黑暗前的幻想乡 矩阵树定理,容斥
同样是矩阵树定理的裸题。但是要解决它需要能够想到容斥才可以。
\(20\)以内的数据范围一定要试试容斥的想法。
#include <bits/stdc++.h>
using namespace std;
#define int long long
const int N = 17 + 5;
const int mod = 1000000007;
int n, k, mat[N][N]; vector <int> u[N], v[N];
int gauss (int n) {
int ret = 1;
for (int i = 1; i <= n; ++i) {
for (int k = i + 1; k <= n; ++k) {
while (mat[k][i]) {
int d = mat[i][i] / mat[k][i];
for (int j = i; j <= n; ++j) {
mat[i][j] = (((mat[i][j] - d * mat[k][j]) % mod) + mod) % mod;
}
swap (mat[k], mat[i]); ret = -ret;
}
}
ret = (((ret * mat[i][i]) % mod) + mod) % mod;
}
return ret;
}
int solve (int sit) {
memset (mat, 0, sizeof (mat));
for (int i = 0; i < n - 1; ++i) {
if ((sit & (1 << i)) == 0) {
// 本位可用
for (int k = 0; k < u[i].size (); ++k) {
mat[u[i][k]][u[i][k]]++;
mat[v[i][k]][v[i][k]]++;
mat[u[i][k]][v[i][k]]--;
mat[v[i][k]][u[i][k]]--;
}
}
}
return gauss (n - 1);
}
signed main () {
cin >> n;
for (int i = 0; i < n - 1; ++i) {
cin >> k;
for (int j = 0; j < k; ++j) {
static int _u, _v;
cin >> _u >> _v;
u[i].push_back (_u);
v[i].push_back (_v);
}
}
int ans = solve (0); // 不考虑有公司不参与的情况
// 某一位为 0 : 可用
// 某一位为 1 : 不可用
int S = (1 << (n - 1)) - 1;
for (int S0 = S; S0; S0 = S & (S0 - 1)) {
int cnt = 0, _S0 = S0;
while (_S0) {
cnt++; _S0 -= (_S0 & -_S0);
}
if (cnt % 2 == 1) {
ans = (((ans - solve (S0)) % mod) + mod) % mod;
} else {
ans = (((ans + solve (S0)) % mod) + mod) % mod;
}
}
cout << ans << endl;
}
【BZOJ4596】【Luogu P4336】 [SHOI2016]黑暗前的幻想乡 矩阵树定理,容斥的更多相关文章
- bzoj 4596 [Shoi2016]黑暗前的幻想乡 矩阵树定理+容斥
4596: [Shoi2016]黑暗前的幻想乡 Time Limit: 20 Sec Memory Limit: 256 MBSubmit: 559 Solved: 325[Submit][Sta ...
- Luogu P4336 [SHOI2016]黑暗前的幻想乡 矩阵树定理+容斥原理
真是菜到爆炸....容斥写反(反正第一次写qwq) 题意:$n-1$个公司,每个公司可以连一些边,求每个边让不同公司连的生成树方案数. 矩阵树定理+容斥原理(注意到$n$不是很大) 枚举公司参与与否的 ...
- [SHOI2016] 黑暗前的幻想乡 - 矩阵树定理,容斥
#include <bits/stdc++.h> using namespace std; #define int long long const int N = 20; const in ...
- bzoj4596/luoguP4336 [SHOI2016]黑暗前的幻想乡(矩阵树定理,容斥)
bzoj4596/luoguP4336 [SHOI2016]黑暗前的幻想乡(矩阵树定理,容斥) bzoj Luogu 题解时间 看一看数据范围,求生成树个数毫无疑问直接上矩阵树定理. 但是要求每条边都 ...
- P4336 [SHOI2016]黑暗前的幻想乡
P4336 [SHOI2016]黑暗前的幻想乡 矩阵树定理(高斯消元+乘法逆元)+容斥 ans=总方案数 -(公司1未参加方案数 ∪ 公司2未参加方案数 ∪ 公司3未参加方案数 ∪ ...... ∪ ...
- 题解 P4336 [SHOI2016]黑暗前的幻想乡
题解 前置芝士 :矩阵树定理 本题是一道计数题,有两个要求: 建造的公路构成一颗生成树 每条公路由不同的公司建造,每条公路与一个公司一一映射 那么看到这两个要求后,我们很容易想到第一个条件用矩阵树定理 ...
- 洛谷P4336 [SHOI2016]黑暗前的幻想乡 [Matrix-Tree定理,容斥]
传送门 思路 首先看到生成树计数,想到Matrix-Tree定理. 然而,这题显然是不能Matrix-Tree定理硬上的,因为还有每个公司只能建一条路的限制.这个限制比较恶心,尝试去除它. 怎么除掉它 ...
- 【BZOJ4596】[Shoi2016]黑暗前的幻想乡 容斥+矩阵树定理
[BZOJ4596][Shoi2016]黑暗前的幻想乡 Description 幽香上台以后,第一项措施就是要修建幻想乡的公路.幻想乡有 N 个城市,之间原来没有任何路.幽香向选民承诺要减税,所以她打 ...
- bzoj4596[Shoi2016]黑暗前的幻想乡 Matrix定理+容斥原理
4596: [Shoi2016]黑暗前的幻想乡 Time Limit: 20 Sec Memory Limit: 256 MBSubmit: 464 Solved: 264[Submit][Sta ...
随机推荐
- 【经验分享】Mongodb操作类实现CRUD
一.背景 公司项目中在做数据存储时使用到Mongodb,所以想着将Mongodb的操作封装后可供项目中其他成员方便使用. 附上Mongodb的下载地址: 下载 1.Mongodb类 此类主要是用来构造 ...
- 面试题 :10亿url去重只给4G内存
我能想到的有以下几种: 用语言判断去重,ex表格去重,数据库去重,文件名字去重, 有人说:10亿url ex表放不下!! 可以用树和折半的思想将10亿url,变成单元最小化的树,然后用ex表去重 ex ...
- mysql拆分逗号一列变多行
需求: SELECT ), ) FROM TABLE a INNER JOIN mysql.help_topic b )
- SpreadJS 纯前端表格控件 V12.2 发布更新
用不到100行代码,在前端实现Excel的全部功能 千万前端开发者翘首企盼,SpreadJS V12.2 终发布更新:六大功能特性,带来更多便利,用不到100行代码,在前端实现Excel的全部功能! ...
- Maven引入oracle驱动包
1.下载驱动包 2.加载到本地maven库中 mvn install:install-file -DgroupId=com.oracle -DartifactId=ojdbc6 -Dversion=1 ...
- # ACM奇淫技巧
目录 ACM奇淫技巧 差分操作 坐标旋转 ACM 卡常优化 vsc代码块(头文件模板) 读入输出优化 逗号表达式 内联函数inline 寄存器变量register 条件判断加减代替取模 自增运算符优化 ...
- oa_mvc_easyui_登录完成(2)
1.使用MVC特有的ajax方式:异步表单提交方式 js文件引用:<script src="~/Scripts/jquery.unobtrusive-ajax.min.js" ...
- FastDFS集群部署(转载 写的比较好)
FastDFS集群部署 之前介绍过关于FastDFS单机部署,详见博文:FastDFS+Nginx(单点部署)事例 下面来玩下FastDFS集群部署,实现高可用(HA) 服务器规划: 跟踪服务器1 ...
- Sklearn使用良心完整入门教程
The complete .ipynb file can be download through my share in onedrive:https://1drv.ms/u/s!Al86h1dThX ...
- 浅尝https
HTTPS http超文本传输协议,所以的东西都是明文传输,容易被拦截,被攻击,我们希望能对通话内容进行加密,那么因此而生,出现了https https:在http的基础上新增加了SSL层 先放图 / ...