【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 ...
随机推荐
- IDEA 控制台中文乱码的问题
-Dfile.encoding=UTF-8
- 手写k-means算法
作为聚类的代表算法,k-means本属于NP难问题,通过迭代优化的方式,可以求解出近似解. 伪代码如下: 1,算法部分 距离采用欧氏距离.参数默认值随意选的. import numpy as np d ...
- seq2seq&attention图解
- 各品牌电脑进BIOS大全
摘要:电脑进入BIOS方法都各不相同,不同品牌不同型号的电脑进入BIOS的方法都是不同的..... 现在重装系统的方法越来越多了,大多数都是靠外物来重装系统,比如说光盘.U盘.移动硬盘等.这 ...
- LCA模板(数剖实现)
题目链接:https://www.luogu.org/problemnew/show/P3379 题意:LCA模板题. 思路:今天开始学树剖,先拿lca练练.树剖解lca,两次dfs复杂度均为O(n) ...
- [转帖]IBM收购红帽价格是多少?是否会形成垄断企业?会存在什么不安因素?
http://www.techweb.com.cn/it/2019-07-10/2743776.shtml 国产的linux 用centos源的 如何是好呢.. 蓝色巨人IBM官方宣布,已经正式完成对 ...
- Linu下安装与卸载MySQL数据库
卸载MySQL数据库,具体操作如下: (1)rpm -qa | grep -i mysql // 检查是否安装了MySQL的组件 (2)卸载前先关闭MySQL服务, a. b. (3)删除MySQL各 ...
- 搞懂MySQL GTID原理
从MySQL 5.6.5 开始新增了一种基于 GTID 的复制方式.通过 GTID 保证了每个在主库上提交的事务在集群中有一个唯一的ID.这种方式强化了数据库的主备一致性,故障恢复以及容错能力. GT ...
- 什么是PWA
什么是PWA:https://www.jianshu.com/p/299c9c720e56 2019前端必会黑科技之PWA:https://www.jianshu.com/p/098af61bbe04 ...
- bfs(太空电梯)
http://oj.jxust.edu.cn/contest/problem?id=1563&pid=4 题目描述 公元9012年,Q博士发明了一部太空电梯,与一般电梯不同,太空电梯不能直接到 ...