Sol

容斥原理+Matrix-Tree定理.容斥跟小星星那道题是一样的,然后...直接Matrix-Tree定理就可以了...

复杂度\(O(2^{n-1}n^3)\)

PS:调了好久啊QAQ 明明知道了Matrix-Tree定理了以后非常简单QAQ n-1写成n 直接真·爆0.

Code

/**************************************************************
Problem: 4596
User: BeiYu
Language: C++
Result: Accepted
Time:6040 ms
Memory:1296 kb
****************************************************************/ #include<cstdio>
#include<cstring>
#include<utility>
#include<vector>
#include<iostream>
using namespace std; #define mpr(a,b) make_pair(a,b)
#define _0(x) ((x>0?x:-x)>0)
typedef long long LL;
const int N = 18;
const LL p = 1000000007; int n,cnt,S;LL ans;int pow2[N];
vector<pair<int,int> > g[N];
LL a[N][N]; inline int in(int x=0,char ch=getchar()){ while(ch>'9'||ch<'0') ch=getchar();
while(ch>='0'&&ch<='9') x=(x<<3)+(x<<1)+ch-'0',ch=getchar();return x; }
LL Pow(LL a,LL b,LL res=1){ for(;b;b>>=1,a=a*a%p) if(b&1) res=res*a%p;return res; }
void Build(int S){
memset(a,0,sizeof(a));cnt=0;
for(int i=0;i<n-1;i++) if(S&pow2[i]){
cnt++;
for(int j=0;j<g[i].size();j++){
int u=g[i][j].first,v=g[i][j].second;
a[u][v]--,a[v][u]--,a[u][u]++,a[v][v]++;
}
}
for(int i=0;i<n;i++) for(int j=0;j<n;j++) a[i][j]=(a[i][j]+p)%p;
// for(int i=0;i<n;i++) for(int j=0;j<n;j++) printf("%10I64d%c",a[i][j]," \n"[j==n-1]);
// cout<<"*******************"<<endl;
}
LL det(int n){
LL res=1;int swpt=0;
for(int i=0,j,k;i<n;i++){
if(!_0(a[i][i])){
for(j=i+1;j<n;j++) if(_0(a[j][i])) break;
if(j>=n) return 0;
for(k=i;k<n;k++) swap(a[i][k],a[j][k]);
swpt++;
}
res=(res*a[i][i]%p+p)%p;
LL inv=Pow(a[i][i],p-2);
// for(j=i+1;j<n;j++) a[i][j]/=a[i][i];
// for(j=i+1;j<n;j++) for(k=i+1;k<n;k++) a[j][k]-=a[j][i]*a[i][k];
for(j=i+1;j<n;j++) for(k=i+1;k<n;k++) a[j][k]=(a[j][k]-a[j][i]*a[i][k]%p*inv%p+p)%p;
}if(swpt&1) return -res;return res;
}
int main(){
n=in();pow2[0]=1;for(int i=1;i<17;i++) pow2[i]=pow2[i-1]<<1;
for(int i=0;i<n-1;i++){ int x=in();for(int j=1,u,v;j<=x;j++) u=in()-1,v=in()-1,g[i].push_back(mpr(u,v)); }
for(S=1;S<pow2[n-1];S++){
// Build(S);
// cout<<cnt<<" "<<det(n-1)<<endl;
Build(S);
if((n-1-cnt)&1) ans=(ans-det(n-1)+p)%p;else ans=(ans+det(n-1))%p;
}cout<<(ans+p)%p<<endl;return 0;
}

  

  

BZOJ 4596: [Shoi2016]黑暗前的幻想乡的更多相关文章

  1. bzoj 4596 [Shoi2016]黑暗前的幻想乡 矩阵树定理+容斥

    4596: [Shoi2016]黑暗前的幻想乡 Time Limit: 20 Sec  Memory Limit: 256 MBSubmit: 559  Solved: 325[Submit][Sta ...

  2. ●BZOJ 4596 [Shoi2016]黑暗前的幻想乡

    题链: http://www.lydsy.com/JudgeOnline/problem.php?id=4596 题解: 容斥,矩阵树定理,矩阵行列式 先说说容斥:(一共有 N-1个公司) 令 f[i ...

  3. bzoj 4596: [Shoi2016]黑暗前的幻想乡【容斥原理+矩阵树定理】

    真是简单粗暴 把矩阵树定理的运算当成黑箱好了反正我不会 这样我们就可以在O(n^3)的时间内算出一个无向图的生成树个数了 然后题目要求每个工程队选一条路,这里可以考虑容斥原理:全选的方案数-不选工程队 ...

  4. BZOJ 4596: [Shoi2016]黑暗前的幻想乡(容斥+Matrix_Tree)

    传送门 解题思路 看到计数想容斥--\(from\) \(shadowice1984\)大爷.首先求出原图的生成树个数比较容易,直接上矩阵树定理,但这样会多算一点东西,会把\(n-2\)个公司的多算进 ...

  5. 【BZOJ 4596】 4596: [Shoi2016]黑暗前的幻想乡 (容斥原理+矩阵树定理)

    4596: [Shoi2016]黑暗前的幻想乡 Time Limit: 20 Sec  Memory Limit: 256 MBSubmit: 324  Solved: 187 Description ...

  6. 【BZOJ】4596: [Shoi2016]黑暗前的幻想乡

    [题意]给定n个点的无向完全图,有n-1个公司各自分管一部分路,要求所有公司都有修路的生成树数.n<=17. [算法]容斥原理+生成树计数(矩阵树定理) [题解]每个生成树方案是一个公司有无修路 ...

  7. bzoj4596[Shoi2016]黑暗前的幻想乡 Matrix定理+容斥原理

    4596: [Shoi2016]黑暗前的幻想乡 Time Limit: 20 Sec  Memory Limit: 256 MBSubmit: 464  Solved: 264[Submit][Sta ...

  8. bzoj4596/luoguP4336 [SHOI2016]黑暗前的幻想乡(矩阵树定理,容斥)

    bzoj4596/luoguP4336 [SHOI2016]黑暗前的幻想乡(矩阵树定理,容斥) bzoj Luogu 题解时间 看一看数据范围,求生成树个数毫无疑问直接上矩阵树定理. 但是要求每条边都 ...

  9. [ZJOI2016]小星星&[SHOI2016]黑暗前的幻想乡(容斥)

    这两道题思路比较像,所以把他们放到一块. [ZJOI2016]小星星 题目描述 小Y是一个心灵手巧的女孩子,她喜欢手工制作一些小饰品.她有n颗小星星,用m条彩色的细线串了起来,每条细线连着两颗小星星. ...

随机推荐

  1. ecshop show_message

    格式lib_main.php show_message(内容, array(返回列表,继续编辑), array(连接地址一,链接地址二, 'info',false); true:自动跳转 输出: fu ...

  2. fixed的left:50%,漂浮

    .floor-box{width: 44px; border: 1px solid #ccc; position: %; z-index: } 漂浮距离,距中间50% .floor-box{width ...

  3. 屌丝逆袭--Asp.net快速入门学习教程 第1晚

    本人屌丝一名,因工作原因,不能白天学习编程,所以只能做夜猫子学习编程,期待一天能逆袭成一名高帅富的技术大牛(靠,都想到流口水了........囧). 本教程记录本屌丝学习Asp.net的过程,大牛就飞 ...

  4. Only one statement is allowed per batch. A batch separator, such as 'GO', might be required between statements.

    When I added the file in VS I forgot to set Build Action = None from the file properties.

  5. Centos系统下邮件服务器的搭建

    原文地址:http://lomu.me/post/linux-email-server

  6. python快排算法

    通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列. ...

  7. Redis命令大全&中文解释&在线测试命令工具&在线中文文档

    在线测试命令地址:http://try.redis.io/ 官方文档:http://redis.io/commands http://redis.io/documentation Redis 命令参考 ...

  8. [CentOS7]安装mysql遇到的问题

    摘要 在安装mysql的时候,遇到了一些问题,这里列出所遇到的问题. yum list mysql-server 在使用命令yum list mysql-server安装mysql的时候,遇到如图所示 ...

  9. 11个很棒的 jQuery 图表库

    如果你曾经使用过任何类型的数据,你应该知道阅读一排排数据的痛苦.通过所有这些数据弄清楚他们的意思是非常不容易的.可视化对于解决这个问题起到了重要的作用.可视化降低了数据阅读的难度,帮助决策者获得可操作 ...

  10. ASP.NET Core -- 安装版

    首先安装的→Visual Studio Community 原文地址 本来觉得安装了vs 就可以了,,结果一直报错,,,太天真... 接下来还要安装 →NuGet.Tools.vsix →DotNet ...