【题意】给定n个点的无向完全图,有n-1个公司各自分管一部分路,要求所有公司都有修路的生成树数。n<=17。

【算法】容斥原理+生成树计数(矩阵树定理)

【题解】每个生成树方案是一个公司有无修路的01排列,定义集合x为公司x有修路的方案集合,则题目要求集合交。

对于若干集合的集合并补集,即x个公司不修路的方案数,就是除去这x个公司的边的生成树数。

ans=Σ(-1)^k g(k),0<=k<=n-1。g(k)表示枚举k个公司不修的生成树数。

复杂度O(2^(n-1)*n^3)。

注意:

1.答案变成非负数。

2.公司边集最大N*N。

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int maxn=,MOD=1e9+;
int a[maxn][maxn],b[maxn][maxn*maxn][],sz[maxn],n,ans;//
bool c[maxn];
void gcd(int a,int b,int &x,int &y){
if(!b){x=;y=;}
else{gcd(b,a%b,y,x);y-=x*(a/b);}
}
int inv(int a){int x,y;gcd(a,MOD,x,y);return (x%MOD+MOD)%MOD;}
int det(int n){
for(int i=;i<=n;i++)for(int j=;j<=n;j++)a[i][j]=(a[i][j]+MOD)%MOD;
bool y=;
for(int i=;i<=n;i++){
int r=i;
for(int j=i+;j<=n;j++)if(a[j][i]>a[r][i])r=j;
if(r!=i){y^=;for(int j=i;j<=n;j++)swap(a[r][j],a[i][j]);}
int v=inv(a[i][i]);
for(int j=i+;j<=n;j++){
for(int k=n;k>=i;k--){
a[j][k]=(a[j][k]-1ll*a[j][i]*v%MOD*a[i][k]%MOD+MOD)%MOD;
}
}
}
int as=y?MOD-:;
for(int i=;i<=n;i++)as=1ll*as*a[i][i]%MOD;
return as;
}
void insert(int u,int v){a[u][v]--;a[v][u]--;a[u][u]++;a[v][v]++;}
int solve(){
memset(a,,sizeof(a));
for(int i=;i<n;i++)if(!c[i]){//
for(int j=;j<=sz[i];j++)insert(b[i][j][],b[i][j][]);
}
return det(n-);
}
void dfs(int x,int y){
if(x==n){
ans=(ans+y*solve())%MOD;
}
else{
c[x]=;
dfs(x+,y);
c[x]=;
dfs(x+,-y);
}
}
int main(){
scanf("%d",&n);
for(int i=;i<n;i++){
scanf("%d",&sz[i]);
for(int j=;j<=sz[i];j++)scanf("%d%d",&b[i][j][],&b[i][j][]);
}
ans=;
dfs(,);
printf("%d",(ans+MOD)%MOD);//
return ;
}

最新文章

  1. 软件工程里的UML序列图的概念和总结
  2. python语句
  3. Windows上搭建Kafka运行环境
  4. 图书馆管理系统 SRS文档
  5. oracle 取随机数据
  6. Angularjs总结(四)$on、$emit和$broadcast的使用
  7. centos安装UCenter 和 UCenter_Home
  8. mac对比class文件
  9. freemarker报错之六
  10. 【转】UNREFERENCED_PARAMETER的作用
  11. JS响应数据
  12. Lua在Redis中的应用
  13. vue.js 跳转同一页面,传不同值,组件监听路由
  14. Python_装饰器精讲_33
  15. C#泛型约束where T : class 解释
  16. webpack打包报错
  17. 点击图片或者鼠标放上hover .图片变大. 1)可以使用css中的transition, transform 2) 预先设置一个 弹出div. 3)弹出层 alert ; 4) 浏览器的宽度document.documentElement.clientWidth || document.body.clientWidth
  18. TextView 多文字字体颜色及多事件监听
  19. TP框架(接口文档模板框架)
  20. 数据结构与算法(周鹏-未出版)-第六章 树-6.5 Huffman 树

热门文章

  1. ORACLE公司传奇历史
  2. virtualbox 5.0.6 在debian jessie amd64启动报错
  3. HTML&amp;CSS实体
  4. Qt程序打包,自动拷贝依赖文件
  5. MAVEN项目标准目录结构 ;
  6. PHP面向对象之重写
  7. PHP创建对象的几种形式
  8. 【前端学习笔记01】JavaScript源生判断数据类型的方法
  9. 第164天:js方法调用的四种模式
  10. Vue2.0 - 全局操作 Vue.set