正题

题目链接:https://www.luogu.com.cn/problem/P4336


题目大意

nnn个点,n−1n-1n−1个边集,求有多少种方案使得每个边集中恰好选出一条边使得这nnn个点连成一棵树。


解题思路

我们需要利用好n−1n-1n−1个边集这个性质,因为nnn很小,考虑容斥。

和[ZJOI2016]小星星那题一样,如果对于kkk个边集我们不选,那么就表示有kkk条边是重复的,所以容斥系数就是(−1)k(-1)^k(−1)k。

枚举去掉的边集,然后剩下的用矩阵树求答案即可。

时间复杂度O(2nn3)O(2^nn^3)O(2nn3),实际会小一些


codecodecode

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<vector>
#define mp(x,y) make_pair(x,y)
#define ll long long
using namespace std;
const ll N=20,P=1e9+7;
ll n,a[N][N],ans;
vector<pair<ll,ll> >q[N];
ll count(ll x){ll ans=0;    while(x){ans++;x-=(x&-x);}return ans;
}
ll power(ll x,ll b){ll ans=1;while(b){if(b&1)ans=ans*x%P;x=x*x%P;b>>=1;}return ans;
}
void solve(ll p){memset(a,0,sizeof(a));for(ll i=1;i<n;i++){if((p>>i-1)&1)continue;for(ll j=0;j<q[i].size();j++){ll x=q[i][j].first,y=q[i][j].second;a[x][y]--;a[y][x]--;a[x][x]++;a[y][y]++;}}ll f=(count(p)&1)?-1:1,prod=1;for(ll i=1;i<n;i++){ll w=i;for(ll j=i;j<n;j++){if(a[i][j]){if(i!=j)f=-f;w=j;break;}}swap(a[i],a[w]);prod=prod*a[i][i]%P;if(!a[i][i])return;ll inv=power(a[i][i],P-2);for(ll j=i;j<n;j++)a[i][j]=a[i][j]*inv%P;for(ll j=i+1;j<n;j++){ll rate=P-a[j][i];for(ll k=i;k<n;k++)a[j][k]=(a[j][k]+rate*a[i][k]%P+P)%P;}}ans=(ans+prod*f+P)%P;return;
}
signed main()
{scanf("%lld",&n);for(ll i=1;i<n;i++){ll m,x,y;scanf("%lld",&m);for(ll j=1;j<=m;j++){scanf("%lld%lld",&x,&y);q[i].push_back(mp(x,y));}}ll MS=(1<<n-1);for(ll i=0;i<MS-1;i++)solve(i);printf("%lld\n",ans);return 0;
}

P4336-[SHOI2016]黑暗前的幻想乡【矩阵树定理,容斥】相关推荐

  1. Luogu P4336 [SHOI2016]黑暗前的幻想乡(容斥,矩阵树定理,子集反演)

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 Luogu P4336 [SHOI2016]黑暗前的幻想乡(容斥,矩阵树定理) Problem n≤1 ...

  2. P4336 [SHOI2016]黑暗前的幻想乡

    题目 P4336 [SHOI2016]黑暗前的幻想乡 做法 每种颜色恰好一条边,有点难处理啊 根据套路,数据范围这么小,容斥一下所有的情况就可以了 对每种颜色进行状压,表这次只能选这些颜色,做\(n- ...

  3. 洛谷 P4336 [SHOI2016] 黑暗前的幻想乡 题解

    前置芝士 Kirchhoff 矩阵树定理 Kirchhoff矩阵树定理解决了一个问题:对于一个确定的无向图,其究竟有多少个生成树? 对于一个无向图,我们拥有其邻接矩阵 A\bf{A}A. 这里的邻接矩 ...

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

    [BZOJ4596][Shoi2016]黑暗前的幻想乡 Description 幽香上台以后,第一项措施就是要修建幻想乡的公路.幻想乡有 N 个城市,之间原来没有任何路.幽香向选民承诺要减税,所以她打 ...

  5. SHOI2016 黑暗前的幻想乡

    题目链接:戳我 幻想乡是个什么东西??(逃 矩阵树定理+容斥 就是设\(dp[i]\)表示至多i个公司修建道路,那么我们有\(ans=dp[n-1]-dp[n-2]+dp[n-3]......\)ba ...

  6. [BZOJ4596][Shoi2016]黑暗前的幻想乡-Matrix Tree 矩阵树定理

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

  7. BZOJ4596:[SHOI2016]黑暗前的幻想乡——题解

    https://www.lydsy.com/JudgeOnline/problem.php?id=4596 https://www.luogu.org/problemnew/show/P4336#su ...

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

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

  9. bzoj 4596: [Shoi2016]黑暗前的幻想乡

    这个题貌似奶了一口trump,,, 本来看到一个公司一条边,而且N是那么科学,肯定要容斥了,然后蛋疼的想应该怎么求生成树.. 本来一开始乱说了个矩阵树定理,然而忘了,就像奇奇怪怪的东西了..然并卵,正 ...

  10. [矩阵树定理 容斥 meet in middle] Topcoder SRM 551 DIV1 Hard. SweetFruits

    枚举最后的树中有多少个是truly sweet的 答案就是 ∑i=0nfi×gi \sum_{i=0}^n f_i\times g_i 其中,fif_i 表示选出 ii 个水果使其价值和不超过Limi ...

最新文章

  1. js获取url地址栏参数的方法,解决中文乱码问题,能支持中文参数
  2. opencv python 将RGB表示的图像转换为HSV(或Ycbcr)表示
  3. 贺利坚老师汇编课程57笔记:CMP和JXXX配合实现条件转移指令if
  4. Transaction事务
  5. 函数名称修饰符__cdelcl __fastcall 与__stdcall
  6. 小程序开发组件的使用
  7. 假如正则从来没来过,我们该如何去匹配一个字符串?
  8. Kubernetes证书相关(CFSSL)
  9. linux php虚拟主机,linux上php虚拟主机(linux搭建虚拟主机)
  10. 入门版Linux上恢复误删除的文件
  11. 否则 JavaFX 应用程序类必须扩展javafx.application.Application
  12. Android短信Messaging数据库字段分析
  13. 无法创建链接服务器 ORCL 的 OLE DB 访问接口 OraOLEDB.Oracle 的实例 (错误:7302)...
  14. Tslint检查下代码JavaScript(angular)规范
  15. 性能第二讲:性能优化-每个程序员都应该知道的数字
  16. Goldsrc 地图 BSP 文件格式规范
  17. name '_name_' is not defined
  18. stricmp linux 头文件,头文件stdio.hstdlib.hstring.h
  19. 全球及中国HDPE电熔配件行业规模预测及十四五动态发展研究报告2021-2027年版
  20. 宠物店小程序开发线上预约寄养洗护商城

热门文章

  1. python 空指针_Python&CType空指针错误
  2. 华为服务器如何用pe重装系统,教你华为u盘重装win10系统详细图文
  3. powerpc-linux-gcc,关于powerpc-linux-uclibc-gcc的使用
  4. http referer 验证防御方法_渗透测试 跨站攻击防御与安全检测手法剖析
  5. mysql打开无法控制_MySQL不能启动和停止 MySQL各种解决方法教程
  6. accdb原有的数据怎么清除_VBA中利用数组对数据批量处理的方法
  7. C++ 学习之旅(1)——编译器Compiler
  8. Java实现BST搜索树
  9. [Java基础]字符串中的编码解码问题
  10. ap计算机科学课程内容,AP计算机科学课程补习有哪些知识点梳理?