真是简单粗暴

把矩阵树定理的运算当成黑箱好了反正我不会

这样我们就可以在O(n^3)的时间内算出一个无向图的生成树个数了

然后题目要求每个工程队选一条路,这里可以考虑容斥原理:全选的方案数-不选工程队1能修的路的方案数-不选工程队2能修的路的方案数……+不选工程队12能修的路的方案数+不选工程队13能修的路的方案数……-不选工程队123能修的路的方案数……

这里直接O(2^(n-1))枚举选择状态即可,然后根据不选的个数奇偶来决定在ans上减或加即可

#include<iostream>
#include<cstdio>
#include<vector>
#include<cstring>
using namespace std;
const int N=20,mod=1e9+7;
int n,a[N][N];
long long ans;
vector<pair<int,int> >v[N];
int read()
{
int r=0,f=1;
char p=getchar();
while(p>'9'||p<'0')
{
if(p=='-')
f=-1;
p=getchar();
}
while(p>='0'&&p<='9')
{
r=r*10+p-48;
p=getchar();
}
return r*f;
}
int gaosi(int n)
{
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
if(a[i][j]<0)
a[i][j]+=mod;
long long ans=1,f=1;
for(int i=1;i<=n;i++)
{
for(int j=i+1;j<=n;j++)
{
long long x=a[i][i],y=a[j][i];
while(y)
{
long long t=x/y;
x%=y;
swap(x,y);
for(int k=i;k<=n;k++)
a[i][k]=(a[i][k]-a[j][k]*t%mod+mod)%mod;
for(int k=i;k<=n;k++)
swap(a[i][k],a[j][k]);
f=-f;
}
}
if(a[i][i]==0)
return 0;
ans=ans*a[i][i]%mod;
}
return f==-1?(mod-ans)%mod:ans;
}
int main()
{
n=read();
for(int i=1;i<n;i++)
{
int m=read();
for(int j=1;j<=m;j++)
{
int x=read(),y=read();
v[i].push_back(make_pair(x,y));
}
}
for(int i=0;i<(1<<(n-1));i++)
{
int s=n-1,x=i;
memset(a,0,sizeof(a));
for(int j=1;j<n;j++,x>>=1)
if(x&1)
{
s--;
for(int k=0;k<v[j].size();k++)
a[v[j][k].first][v[j][k].first]++,a[v[j][k].second][v[j][k].second]++,a[v[j][k].first][v[j][k].second]--,a[v[j][k].second][v[j][k].first]--;
}
if(s&1)
ans=(ans-gaosi(n-1))%mod;
else
ans=(ans+gaosi(n-1))%mod;
}
printf("%d\n",(ans+mod)%mod);
return 0;
}

bzoj 4596: [Shoi2016]黑暗前的幻想乡【容斥原理+矩阵树定理】的更多相关文章

  1. 【bzoj4596】[Shoi2016]黑暗前的幻想乡 容斥原理+矩阵树定理

    题目描述 给出 $n$ 个点和 $n-1$ 种颜色,每种颜色有若干条边.求这张图多少棵每种颜色的边都出现过的生成树,答案对 $10^9+7$ 取模. 输入 第一行包含一个正整数 N(N<=17) ...

  2. luoguP4336 [SHOI2016]黑暗前的幻想乡 容斥原理 + 矩阵树定理

    自然地想到容斥原理 然后套个矩阵树就行了 求行列式的时候只有换行要改变符号啊QAQ 复杂度为\(O(2^n * n^3)\) #include <cstdio> #include < ...

  3. [luogu3244 SHOI2016] 黑暗前的幻想乡(容斥原理+矩阵树定理)

    传送门 Description 给出 n 个点和 n−1 种颜色,每种颜色有若干条边.求这张图多少棵每种颜色的边都出现过的生成树,答案对 109+7 取模. Input 第一行包含一个正整数 N(N& ...

  4. 【bzoj4596】[Shoi2016]黑暗前的幻想乡 (矩阵树定理+容斥)

    Description 四年一度的幻想乡大选开始了,最近幻想乡最大的问题是很多来历不明的妖怪涌入了幻想乡,扰乱了幻想乡昔日的秩序.但是幻想乡的建制派妖怪(人类)博丽灵梦和八云紫等人整日高谈所有妖怪平等 ...

  5. 【BZOJ4596】黑暗前的幻想乡(矩阵树定理,容斥)

    [BZOJ4596]黑暗前的幻想乡(矩阵树定理,容斥) 题面 BZOJ 有\(n\)个点,要求连出一棵生成树, 指定了一些边可以染成某种颜色,一共\(n-1\)种颜色, 求所有颜色都出现过的生成树方案 ...

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

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

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

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

  8. BZOJ 4596: [Shoi2016]黑暗前的幻想乡

    Sol 容斥原理+Matrix-Tree定理.容斥跟小星星那道题是一样的,然后...直接Matrix-Tree定理就可以了... 复杂度\(O(2^{n-1}n^3)\) PS:调了好久啊QAQ 明明 ...

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

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

随机推荐

  1. ASP.net在IE6下乱码问题

    今天处理程序的时候遇到一个坑爹的问题 该死的IE6传中文参数会出现 类似于◆的乱码 不过终于解决了  也许解决的方法有很多  和大家分享下我的解决方案 我用的javascript中 传的参数 < ...

  2. Android 笔记一:线性布局

    建立布局 新建项目后,在如图路径下新建xml文件可以开始编辑 weight的使用 android:layout_width="0dp",或android:layout_width= ...

  3. [bzoj4520][Cqoi2016]K远点对_KD-Tree_堆

    K远点对 bzoj-4520 Cqoi-2016 题目大意:已知平面内 N 个点的坐标,求欧氏距离下的第 K 远点对. 注释:$1\le n\le 10^5$,$1\le k\le 100$,$k\l ...

  4. Letter Combinations of a Phone Number(带for循环的DFS,组合问题,递归总结)

    Given a digit string, return all possible letter combinations that the number could represent. A map ...

  5. Binary Tree Preorder Traversal (非递归实现)

    具体思路参见:二叉树的非递归遍历(转) 先序遍历(根左右). 即把每一个节点当做根节点来对待. /** * Definition for binary tree * struct TreeNode { ...

  6. mac idea快捷键(部分常用)

    shift+F6重命名 shift+enter 换到下一行 shift+F8等同eclipse的f8跳到下一个断点,也等同eclipse的F7跳出函数 F8等同eclipse的f6跳到下一步F7等同e ...

  7. JSP的异常处理

    以下内容引用自http://wiki.jikexueyuan.com/project/jsp/exception-handling.html: 当写JSP代码的时候,有可能会留下一个编码错误,并且它会 ...

  8. mysql导入大型sql文件时注意事项

    原文:http://blog.csdn.net/k21325/article/details/70808563 大型sql文件,需要在my.ini(windows)或者my.cnf(Linux)中设置 ...

  9. Eclipse插件开发中的选择监听机制(Selection Provider-Listener)

    Eclipse插件开发中的选择监听机制(Selection Provider-Listener) 监听机制是eclipse插件开发或rcp应用开发中经常使用的技术,比方点击TableViewer或Tr ...

  10. [Canvas画图] 藏图阁(16) 人体穴位

    本节目标: 趁着今天是愚人节.阿伟决定来重温一下学医的那段日子. 有那么一段时间, 阿伟对武侠小说和医学同一时候产生了浓厚的兴趣,当时最想学的就是葵花点穴手, 一阳指之类的点穴功夫.轻轻一点.就能把别 ...