【bzoj4596】[Shoi2016]黑暗前的幻想乡 容斥原理+矩阵树定理
题目描述
给出 $n$ 个点和 $n-1$ 种颜色,每种颜色有若干条边。求这张图多少棵每种颜色的边都出现过的生成树,答案对 $10^9+7$ 取模。
输入
输出
样例输入
4
2 3 2 4 2
5 2 1 3 1 3 2 4 1 4 3
4 2 1 3 2 4 1 4 2
样例输出
17
题解
容斥原理+矩阵树定理
答案为:随便选的 - 钦定1种颜色不能选的 + 钦定2种颜色不能选的 - ... 。
爆搜每种颜色是否被钦定不能选,然后使用矩阵树定理求出当前条件下的生成树个数即可。
时间复杂度 $O(2^n·n^3)$ 。
#include <cstdio>
#include <cstring>
#include <algorithm>
#define mod 1000000007
typedef long long ll;
using namespace std;
int n , m[18] , vx[18][140] , vy[18][140] , v[18];
ll a[18][18] , ans;
inline ll pow(ll x , int y)
{
ll ans = 1;
while(y)
{
if(y & 1) ans = ans * x % mod;
x = x * x % mod , y >>= 1;
}
return ans;
}
void dfs(int x , int flag)
{
if(x == n)
{
memset(a , 0 , sizeof(a));
int i , j , k;
ll now = 1 , t;
for(i = 1 ; i < n ; i ++ )
if(v[i])
for(j = 1 ; j <= m[i] ; j ++ )
a[vx[i][j]][vx[i][j]] ++ , a[vy[i][j]][vy[i][j]] ++ , a[vx[i][j]][vy[i][j]] -- , a[vy[i][j]][vx[i][j]] -- ;
for(i = 2 ; i <= n ; i ++ )
{
for(j = i ; j <= n ; j ++ )
if(a[j][i])
break;
if(j > n) break;
if(j != i)
{
flag = -flag;
for(k = i ; k <= n ; k ++ )
swap(a[i][k] , a[j][k]);
}
now = now * a[i][i] % mod , t = pow(a[i][i] , mod - 2);
for(j = i ; j <= n ; j ++ ) a[i][j] = a[i][j] * t % mod;
for(j = i + 1 ; j <= n ; j ++ )
for(t = a[j][i] , k = i ; k <= n ; k ++ )
a[j][k] = (a[j][k] - t * a[i][k] % mod + mod) % mod;
}
if(i > n) ans = (ans + flag * now + mod) % mod;
return;
}
v[x] = 1 , dfs(x + 1 , flag);
v[x] = 0 , dfs(x + 1 , -flag);
}
int main()
{
int i , j;
scanf("%d" , &n);
for(i = 1 ; i < n ; i ++ )
{
scanf("%d" , &m[i]);
for(j = 1 ; j <= m[i] ; j ++ )
scanf("%d%d" , &vx[i][j] , &vy[i][j]);
}
dfs(1 , 1);
printf("%lld\n" , ans);
return 0;
}
【bzoj4596】[Shoi2016]黑暗前的幻想乡 容斥原理+矩阵树定理的更多相关文章
- luoguP4336 [SHOI2016]黑暗前的幻想乡 容斥原理 + 矩阵树定理
自然地想到容斥原理 然后套个矩阵树就行了 求行列式的时候只有换行要改变符号啊QAQ 复杂度为\(O(2^n * n^3)\) #include <cstdio> #include < ...
- [luogu3244 SHOI2016] 黑暗前的幻想乡(容斥原理+矩阵树定理)
传送门 Description 给出 n 个点和 n−1 种颜色,每种颜色有若干条边.求这张图多少棵每种颜色的边都出现过的生成树,答案对 109+7 取模. Input 第一行包含一个正整数 N(N& ...
- 【BZOJ4596】黑暗前的幻想乡(矩阵树定理,容斥)
[BZOJ4596]黑暗前的幻想乡(矩阵树定理,容斥) 题面 BZOJ 有\(n\)个点,要求连出一棵生成树, 指定了一些边可以染成某种颜色,一共\(n-1\)种颜色, 求所有颜色都出现过的生成树方案 ...
- 【bzoj4596】[Shoi2016]黑暗前的幻想乡 (矩阵树定理+容斥)
Description 四年一度的幻想乡大选开始了,最近幻想乡最大的问题是很多来历不明的妖怪涌入了幻想乡,扰乱了幻想乡昔日的秩序.但是幻想乡的建制派妖怪(人类)博丽灵梦和八云紫等人整日高谈所有妖怪平等 ...
- bzoj4596[Shoi2016]黑暗前的幻想乡 Matrix定理+容斥原理
4596: [Shoi2016]黑暗前的幻想乡 Time Limit: 20 Sec Memory Limit: 256 MBSubmit: 464 Solved: 264[Submit][Sta ...
- BZOJ4596: [Shoi2016]黑暗前的幻想乡
Description 四年一度的幻想乡大选开始了,最近幻想乡最大的问题是很多来历不明的妖 怪涌入了幻想乡,扰乱了幻想乡昔日的秩序.但是幻想乡的建制派妖怪(人类) 博丽灵梦和八云紫等人整日高谈所有妖怪 ...
- 【BZOJ4596】[Shoi2016]黑暗前的幻想乡 容斥+矩阵树定理
[BZOJ4596][Shoi2016]黑暗前的幻想乡 Description 幽香上台以后,第一项措施就是要修建幻想乡的公路.幻想乡有 N 个城市,之间原来没有任何路.幽香向选民承诺要减税,所以她打 ...
- bzoj4596/luoguP4336 [SHOI2016]黑暗前的幻想乡(矩阵树定理,容斥)
bzoj4596/luoguP4336 [SHOI2016]黑暗前的幻想乡(矩阵树定理,容斥) bzoj Luogu 题解时间 看一看数据范围,求生成树个数毫无疑问直接上矩阵树定理. 但是要求每条边都 ...
- 【BZOJ 4596】 4596: [Shoi2016]黑暗前的幻想乡 (容斥原理+矩阵树定理)
4596: [Shoi2016]黑暗前的幻想乡 Time Limit: 20 Sec Memory Limit: 256 MBSubmit: 324 Solved: 187 Description ...
随机推荐
- pip install Yellowfin失败的问题
上面的方法简单有效 https://blog.csdn.net/quqiaoluo5620/article/details/80608474
- Java 包(package)
为了更好地组织类,Java 提供了包机制,用于区别类名的命名空间. 1.包的作用 1.把功能相似或相关的类或接口组织在同一个包中,方便类的查找和使用. 2.如同文件夹一样,包也采用了树形目录的存储方式 ...
- HDU 3592 World Exhibition(线性差分约束,spfa跑最短路+判断负环)
World Exhibition Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) ...
- http_build_query用法,挺方便的
http_build_query (PHP 5) http_build_query -- 生成 url-encoded 之后的请求字符串描述string http_build_query ( arra ...
- 【MEVN架构】mongodb+ express + vue + nodejs 搭建后台
前端技术栈:vue2 + vuex + vue-router + webpack + ES6/7 + less + element-ui 服务端技术栈:nodejs + express + mongo ...
- 20155206赵飞 基于《Arm试验箱的国密算法应用》课程设计个人报告
20155206赵飞 基于<Arm试验箱的国密算法应用>课程设计个人报告 课程设计中承担的任务 完成试验箱测试功能1,2,3 . 1:LED闪烁实验 一.实验目的 学习GPIO原理 ...
- Unused Method(不再使用的方法)——Dead Code(死亡代码)
系列文章目录: 使用Fortify进行代码静态分析(系列文章) Unused Method(不再使用的方法) 示例: private bool checkLevel(strin ...
- OFS环境,删除Resource 时出现错误失败,应该如何继续
From the Windows failover cluster manager,select the group listener, stop it, and delete it. Do the ...
- 【php增删改查实例】第一节 - PHP开发环境配置
最近需要使用PHP,于是把平时的积累整理一下,就有了这个教程. 首先是环境配置: 1.操作系统:windos7 2.后台:PHP 3.前台:Html + js + css 4.数据库:MYSQL 5. ...
- python常用算法实现
排序是计算机语言需要实现的基本算法之一,有序的数据结构会带来效率上的极大提升. 1.插入排序 插入排序默认当前被插入的序列是有序的,新元素插入到应该插入的位置,使得新序列仍然有序. def inser ...