【bzoj4596】黑暗前的幻想乡
Solution
这题的话。。因为\(N\)比较小啊所以我们可以大力容斥(尽管实际算下来复杂度有点爆炸不过实测是能过的qwq)
枚举包含了哪些颜色的边,每次重新填矩阵然后矩阵树定理高消求一波行列式然后乘上个容斥系数加到答案里面去就好了
关于容斥原理这个东西。。(怎么感觉快忘光了)
其实也不用想太多,反正是从最终状态(包含所有的,在这里是包含\(n-1\)种)开始往后推符号为一正一负就好了:
\]
然后代码大概长这个样子
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int N=20,MOD=1e9+7;
struct xxx{
int x,y,nxt;
}a[100010];
int A[N][N],h[N],ok[N];
int n,m,tot,ans;
void add(int x,int y,int col);
int solve(int n);
int Abs(int x){return x>0?x:-x;}
bool in(int st,int x){return st>>(x-1)&1;}
int work();
int main(){
#ifndef ONLINE_JUDGE
freopen("a.in","r",stdin);
#endif
int x,y;
scanf("%d",&n);
memset(h,-1,sizeof(h));
tot=0;
for (int i=1;i<n;++i){
scanf("%d",&m);
for (int j=1;j<=m;++j){
scanf("%d%d",&x,&y);
add(x,y,i);
}
}
ans=0;
int all=1<<n-1,cnt,tmp,n1;
for (int i=1;i<all;++i){
memset(A,0,sizeof(A));
cnt=0;
for (int j=1;j<n;++j)
if (in(i,j)){
for (int k=h[j];k!=-1;k=a[k].nxt){
x=a[k].x; y=a[k].y;
++A[x][x]; ++A[y][y];
--A[x][y]; --A[y][x];
}
}
else ++cnt;
tmp=solve(n-1);
if (cnt&1)
ans=(ans-tmp+MOD)%MOD;
else
ans=(ans+tmp)%MOD;
}
printf("%d\n",ans);
}
void add(int x,int y,int col){
a[++tot].x=x; a[tot].y=y; a[tot].nxt=h[col]; h[col]=tot;
}
int solve(int n){
int id,ret=1,tmp;
for (int i=1;i<=n;++i){
for (id=i;id<=n;++id)
if (A[id][i]) break;
if (id>n) continue;
if (id!=i){
ret=-ret;
for (int j=i+1;j<=n;++j) swap(A[i][j],A[id][j]);
}
for (int j=i+1;j<=n;++j){
while (A[j][i]){
tmp=A[j][i]/A[i][i];
for (int k=1;k<=n;++k)
A[j][k]=(1LL*A[j][k]+MOD-1LL*tmp*A[i][k]%MOD)%MOD;
if (A[j][i]==0) break;
ret=-ret;
for (int k=1;k<=n;++k)
swap(A[j][k],A[i][k]);
}
}
}
for (int i=1;i<=n;++i)
ret=1LL*ret*A[i][i]%MOD;
return (ret+MOD)%MOD;
}
【bzoj4596】黑暗前的幻想乡的更多相关文章
- 【BZOJ4596】黑暗前的幻想乡(矩阵树定理,容斥)
[BZOJ4596]黑暗前的幻想乡(矩阵树定理,容斥) 题面 BZOJ 有\(n\)个点,要求连出一棵生成树, 指定了一些边可以染成某种颜色,一共\(n-1\)种颜色, 求所有颜色都出现过的生成树方案 ...
- 【BZOJ4596】[Shoi2016]黑暗前的幻想乡 容斥+矩阵树定理
[BZOJ4596][Shoi2016]黑暗前的幻想乡 Description 幽香上台以后,第一项措施就是要修建幻想乡的公路.幻想乡有 N 个城市,之间原来没有任何路.幽香向选民承诺要减税,所以她打 ...
- bzoj4596/luoguP4336 [SHOI2016]黑暗前的幻想乡(矩阵树定理,容斥)
bzoj4596/luoguP4336 [SHOI2016]黑暗前的幻想乡(矩阵树定理,容斥) bzoj Luogu 题解时间 看一看数据范围,求生成树个数毫无疑问直接上矩阵树定理. 但是要求每条边都 ...
- bzoj4596[Shoi2016]黑暗前的幻想乡 Matrix定理+容斥原理
4596: [Shoi2016]黑暗前的幻想乡 Time Limit: 20 Sec Memory Limit: 256 MBSubmit: 464 Solved: 264[Submit][Sta ...
- bzoj 4596 [Shoi2016]黑暗前的幻想乡 矩阵树定理+容斥
4596: [Shoi2016]黑暗前的幻想乡 Time Limit: 20 Sec Memory Limit: 256 MBSubmit: 559 Solved: 325[Submit][Sta ...
- 「SHOI2016」黑暗前的幻想乡 解题报告
「SHOI2016」黑暗前的幻想乡 sb题想不出来,应该去思考原因,而不是自暴自弃 一开始总是想着对子树做dp,但是状态压不起去,考虑用容斥消减一些条件变得好统计,结果越想越乱. 期间想过矩阵树定理, ...
- [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]黑暗前的幻想乡
Description 四年一度的幻想乡大选开始了,最近幻想乡最大的问题是很多来历不明的妖 怪涌入了幻想乡,扰乱了幻想乡昔日的秩序.但是幻想乡的建制派妖怪(人类) 博丽灵梦和八云紫等人整日高谈所有妖怪 ...
随机推荐
- redis 批量删除操作
redis 批量删除操作 需要在redis里面清空一批数据,redis没有支持通配符删除, 只有del key1 key2 ... 但是可以通配符获取 KEYS PATTERN 然后利用linux管道 ...
- 利用Pillow给图片添加重点框(适用UI自动化测试)
效果图 一个简单的例子 安装Pillow 在cmd窗口/终端输入: pip install pillow 如果被墙,下载巨慢的话,可以临时替换豆瓣源 pip install pillow -i htt ...
- JAVA学习笔记--初识容器类库
一.前言 JAVA中一切皆为对象,因而,持有对象显得尤为重要. 在JAVA中,我们可以通过创建一个对象的引用的方式来持有对象: HoldingObject holding; 也可以创建一个对象数组来持 ...
- 支持向量机SVM 初识
虽然已经学习了神经网络和深度学习并在几个项目之中加以运用了,但在斯坦福公开课上听吴恩达老师说他(在当时)更喜欢使用SVM,而很少使用神经网络来解决问题,因此来学习一下SVM的种种. 先解释一些概念吧: ...
- zend安装及破解
Zend下载 https://pan.baidu.com/s/1fCfUQ0j7dxEtOzbNnsgODg 破解: 1.打开dmg文件安装,将Zend Studio拖拽至applications进行 ...
- 英文Datasheet没那么难读
话说学好数理化,走遍天下都不怕.可是在这个所谓的全球化时代,真要走遍天下的话,数理化还真未必比得上一门外语.作为技术人员,可以看到的是目前多数前沿的产品和技术多来自发达的欧美等国家,而英语目前才是真正 ...
- Scrum立会报告+燃尽图(十一月十九日总第二十七次):功能开发与修复上一阶段bug
此作业要求参见:https://edu.cnblogs.com/campus/nenu/2018fall/homework/2284 项目地址:https://git.coding.net/zhang ...
- JAVA之路(一)
距离做下复习JAVA并学好JAVA的决定已经过去一周了,我买了慕课网的JAVA入门视频,在图书馆借了三本关于JAVA的书——两本是JAVA入门经典,一本是JAVA WEB开发宝典.我的计划是短时间内复 ...
- 1014 我的C语言文法定义与C程序推导过程
程序> -> <外部声明> | <程序> <外部声明> <外部声明> -> <函数定义> | <声明> < ...
- Python入门:认识变量和字符串
几个月前,我开始学习个人形象管理,从发型.妆容.服饰到仪表仪态,都开始做全新改造,在塑造个人风格时,最基础的是先了解自己属于哪种风格,然后找到参考对象去模仿,可以是自己欣赏的人.明星或模特等,直至最后 ...