【SHOI2016】黑暗前的幻想乡
题面
题解
如果没有建筑公司的限制,那么就是个\(\mathrm{Matrix\;tree}\)板子
其实有了也一样
发现\(n\leq 17\),考虑容斥
每次钦定一些建筑公司,计算它们包含的边的生成树的方案数
复杂度\(\mathrm{O}(2^nn^3)\)
代码
#include<cstdio>
#include<cstring>
#include<cctype>
#include<algorithm>
#define RG register
#define file(x) freopen(#x".in", "r", stdin), freopen(#x".out", "w", stdout)
#define clear(x, y) memset(x, y, sizeof(x))
inline int read()
{
int data = 0, w = 1; char ch = getchar();
while(ch != '-' && (!isdigit(ch))) ch = getchar();
if(ch == '-') w = -1, ch = getchar();
while(isdigit(ch)) data = data * 10 + (ch ^ 48), ch = getchar();
return data * w;
}
const int N(20), Mod(1e9 + 7);
int n, a[N][N], m[N], popcnt[1 << 17], ans;
int U[N][N * N], V[N][N * N];
int solve(int S)
{
for(RG int i = 1; i <= n; i++)
for(RG int j = 1; j <= n; j++)
a[i][j] = 0;
for(RG int i = 1; i < n; i++)
if(S & (1 << (i - 1))) for(RG int j = 1; j <= m[i]; j++)
{
int x = U[i][j], y = V[i][j];
++a[x][x], ++a[y][y], --a[y][x], --a[x][y];
}
for(RG int i = 1; i <= n; i++)
for(RG int j = 1; j <= n; j++)
a[i][j] = (a[i][j] + Mod) % Mod;
int ans = 1;
for(RG int i = 2; i <= n; i++)
{
for(RG int j = i + 1; j <= n; j++)
while(a[j][i])
{
int t = a[i][i] / a[j][i];
for(RG int k = i; k <= n; k++)
a[i][k] = (a[i][k] - 1ll * a[j][k] * t % Mod + Mod) % Mod,
std::swap(a[i][k], a[j][k]);
ans = Mod - ans;
}
ans = 1ll * ans * a[i][i] % Mod;
}
return ans;
}
int main()
{
#ifndef ONLINE_JUDGE
file(cpp);
#endif
n = read();
for(RG int i = 1; i < n; i++)
{
m[i] = read();
for(RG int j = 1; j <= m[i]; j++)
U[i][j] = read(), V[i][j] = read();
}
for(RG int i = 0; i < 1 << (n - 1); i++)
popcnt[i] = popcnt[i >> 1] + (i & 1);
for(RG int i = 0; i < 1 << (n - 1); i++)
ans = (ans + (((n - 1 - popcnt[i]) & 1) ?
Mod - solve(i) : solve(i))) % Mod;
printf("%d\n", ans);
return 0;
}
【SHOI2016】黑暗前的幻想乡的更多相关文章
- bzoj 4596 [Shoi2016]黑暗前的幻想乡 矩阵树定理+容斥
4596: [Shoi2016]黑暗前的幻想乡 Time Limit: 20 Sec Memory Limit: 256 MBSubmit: 559 Solved: 325[Submit][Sta ...
- bzoj4596[Shoi2016]黑暗前的幻想乡 Matrix定理+容斥原理
4596: [Shoi2016]黑暗前的幻想乡 Time Limit: 20 Sec Memory Limit: 256 MBSubmit: 464 Solved: 264[Submit][Sta ...
- [ZJOI2016]小星星&[SHOI2016]黑暗前的幻想乡(容斥)
这两道题思路比较像,所以把他们放到一块. [ZJOI2016]小星星 题目描述 小Y是一个心灵手巧的女孩子,她喜欢手工制作一些小饰品.她有n颗小星星,用m条彩色的细线串了起来,每条细线连着两颗小星星. ...
- P4336 [SHOI2016]黑暗前的幻想乡
P4336 [SHOI2016]黑暗前的幻想乡 矩阵树定理(高斯消元+乘法逆元)+容斥 ans=总方案数 -(公司1未参加方案数 ∪ 公司2未参加方案数 ∪ 公司3未参加方案数 ∪ ...... ∪ ...
- 【BZOJ 4596】 4596: [Shoi2016]黑暗前的幻想乡 (容斥原理+矩阵树定理)
4596: [Shoi2016]黑暗前的幻想乡 Time Limit: 20 Sec Memory Limit: 256 MBSubmit: 324 Solved: 187 Description ...
- 【BZOJ4596】[Shoi2016]黑暗前的幻想乡 容斥+矩阵树定理
[BZOJ4596][Shoi2016]黑暗前的幻想乡 Description 幽香上台以后,第一项措施就是要修建幻想乡的公路.幻想乡有 N 个城市,之间原来没有任何路.幽香向选民承诺要减税,所以她打 ...
- bzoj4596/luoguP4336 [SHOI2016]黑暗前的幻想乡(矩阵树定理,容斥)
bzoj4596/luoguP4336 [SHOI2016]黑暗前的幻想乡(矩阵树定理,容斥) bzoj Luogu 题解时间 看一看数据范围,求生成树个数毫无疑问直接上矩阵树定理. 但是要求每条边都 ...
- BZOJ4596: [Shoi2016]黑暗前的幻想乡
Description 四年一度的幻想乡大选开始了,最近幻想乡最大的问题是很多来历不明的妖 怪涌入了幻想乡,扰乱了幻想乡昔日的秩序.但是幻想乡的建制派妖怪(人类) 博丽灵梦和八云紫等人整日高谈所有妖怪 ...
- [SHOI2016]黑暗前的幻想乡
Description 四年一度的幻想乡大选开始了,最近幻想乡最大的问题是很多来历不明的妖 怪涌入了幻想乡,扰乱了幻想乡昔日的秩序.但是幻想乡的建制派妖怪(人类) 博丽灵梦和八云紫等人整日高谈所有妖怪 ...
- BZOJ4596:[SHOI2016]黑暗前的幻想乡——题解
https://www.lydsy.com/JudgeOnline/problem.php?id=4596 https://www.luogu.org/problemnew/show/P4336#su ...
随机推荐
- Vue2学习笔记:v-show指令
v-show指令:v-show="true/false" 控制元素显示/隐藏 1.使用 <!DOCTYPE html> <html> <head> ...
- SQL Server FOR XML PATH 和 STUFF函数的用法
FOR XML PATH ,其实它就是将查询结果集以XML形式展现,将多行的结果,展示在同一行. 下面我们来写一个例子: 假设我们有个工作流程表: CREATE TABLE [dbo].[Workfl ...
- C# 调用WebService服务
方 法 一 : 选择项目,右键添加服务引用,输入服务地址,如图: 点击确定跳转到如下界面: 调用 接口: ServiceReference1.ImportDataServiceClient sr = ...
- VS2017 加载项目 :未找到框架“.NETFramework,Version=v4.7”的引用程序集(出坑指南)
报出的错误为: 错误MSB3644: 未找到框架“.NETFramework,Version=v4.7”的引用程序集.若要解决此问题,请安装此框架版本的 SDK 或 Targeting Pack,或将 ...
- 用Model来计算cell的高度
用Model来计算cell的高度 效果: 将计算cell高度的方法直接移植到Model当中,初始化的瞬间就计算好了高度,非常好用! 源码: Model // // Model.h // // Copy ...
- [UI] Elastic Stack & scrollReveal.js
Elastic Stack & scrollReveal.js Elastic Stack http://freebiesbug.com/code-stuff/elastistack-js-d ...
- Python学习---ModelForm拾遗180325
ModelForm适用于前台验证和后台直接操作数据库的前后台未做分离,可以一次执行验证和保存数据的场景. 注意: 1. ModelForm里面没有删除方法,需要手动删除内容 2. ModelFor ...
- September 23rd 2017 Week 38th Saturday
Lonely people will always remember his life occurred in each person. 寂寞的人总是会用心记住他生命中出现过的每个人. If you ...
- November 27th 2016 Week 48th Sunday
It is never too late to be what you might have been. 勇敢做自己,永远不嫌迟. What I might have been? Experienci ...
- c++程序员学习go
作为一个c++程序员学习go编程的笔记.首先声明本人文笔太差,当你阅读一点觉得实在无法阅读下去时请移步. 下载安装go,安装完毕后会增加系统环境变量path内容指定go程序所在目录,可以打开cmd输入 ...