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

题面

BZOJ

有\(n\)个点,要求连出一棵生成树,

指定了一些边可以染成某种颜色,一共\(n-1\)种颜色,

求所有颜色都出现过的生成树方案数。

题解

一脸的容斥啊。

先矩阵树定理暴力算出所有符合条件的生成树,然后减去\(n-2\)中颜色的方案数,

再加上\(n-3\)种颜色的方案数......

所以直接暴力枚举颜色的子集,每次矩阵树就好了。

时间复杂度大概是\(O(2^{n-1}n^3log)\)???

虽然\(log\)小的不行,甚至可以当做没有啊。

但是,。。这复杂度假的不行啊。、

假装复杂度非常正确

  1. #include<iostream>
  2. #include<cstdio>
  3. using namespace std;
  4. #define ll long long
  5. #define RG register
  6. #define MAX 20
  7. #define MOD 1000000007
  8. void add(int &x,int y){x+=y;if(x>=MOD)x-=MOD;}
  9. inline int read()
  10. {
  11. RG int x=0,t=1;RG char ch=getchar();
  12. while((ch<'0'||ch>'9')&&ch!='-')ch=getchar();
  13. if(ch=='-')t=-1,ch=getchar();
  14. while(ch<='9'&&ch>='0')x=x*10+ch-48,ch=getchar();
  15. return x*t;
  16. }
  17. int n,a[MAX][MAX],m[MAX],cnt[1<<17],ans;
  18. int u[MAX][MAX*MAX],v[MAX][MAX*MAX];
  19. int Calc(int S)
  20. {
  21. for(int i=1;i<=n;++i)
  22. for(int j=1;j<=n;++j)a[i][j]=0;
  23. for(int i=1;i<n;++i)
  24. if(S&(1<<(i-1)))
  25. for(int j=1;j<=m[i];++j)
  26. {
  27. int x=u[i][j],y=v[i][j];
  28. ++a[x][x];++a[y][y];--a[x][y];--a[y][x];
  29. }
  30. for(int i=1;i<=n;++i)
  31. for(int j=1;j<=n;++j)add(a[i][j],MOD);
  32. int ret=1;
  33. for(int i=2;i<=n;++i)
  34. {
  35. for(int j=i+1;j<=n;++j)
  36. while(a[j][i])
  37. {
  38. int t=a[i][i]/a[j][i];
  39. for(int k=i;k<=n;++k)
  40. a[i][k]=(a[i][k]-1ll*a[j][k]*t%MOD+MOD)%MOD,swap(a[i][k],a[j][k]);
  41. ret=MOD-ret;
  42. }
  43. ret=1ll*ret*a[i][i]%MOD;
  44. }
  45. return ret;
  46. }
  47. int main()
  48. {
  49. n=read();
  50. for(int i=1;i<n;++i)
  51. {
  52. m[i]=read();
  53. for(int j=1;j<=m[i];++j)u[i][j]=read(),v[i][j]=read();
  54. }
  55. for(int i=0;i<1<<(n-1);++i)cnt[i]=cnt[i>>1]+(i&1);
  56. for(int i=0;i<1<<(n-1);++i)add(ans,((n-1-cnt[i])&1)?MOD-Calc(i):Calc(i));
  57. printf("%d\n",ans);
  58. }

【BZOJ4596】黑暗前的幻想乡(矩阵树定理,容斥)的更多相关文章

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

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

  2. [SHOI2016] 黑暗前的幻想乡 - 矩阵树定理,容斥

    #include <bits/stdc++.h> using namespace std; #define int long long const int N = 20; const in ...

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

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

  4. 【BZOJ4596】【Luogu P4336】 [SHOI2016]黑暗前的幻想乡 矩阵树定理,容斥

    同样是矩阵树定理的裸题.但是要解决它需要能够想到容斥才可以. \(20\)以内的数据范围一定要试试容斥的想法. #include <bits/stdc++.h> using namespa ...

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

    真是菜到爆炸....容斥写反(反正第一次写qwq) 题意:$n-1$个公司,每个公司可以连一些边,求每个边让不同公司连的生成树方案数. 矩阵树定理+容斥原理(注意到$n$不是很大) 枚举公司参与与否的 ...

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

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

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

    P4336 [SHOI2016]黑暗前的幻想乡 矩阵树定理(高斯消元+乘法逆元)+容斥 ans=总方案数 -(公司1未参加方案数 ∪ 公司2未参加方案数 ∪ 公司3未参加方案数 ∪ ...... ∪ ...

  8. 洛谷 P4336 黑暗前的幻想乡 —— 容斥+矩阵树定理

    题目:https://www.luogu.org/problemnew/show/P4336 当作考试题了,然而没想出来,呵呵. 其实不是二分图完美匹配方案数,而是矩阵树定理+容斥... 就是先放上所 ...

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

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

随机推荐

  1. Struts 2(七):国际化

    基于Struts 2的Web应用国际化开发非常简单,其中Struts 2的国际化包括如下几部分:校验提示信息国际化.类型转换提示信息国际化.Action信息国际化以及JSP页面国际化. 第一节 JSP ...

  2. Redash二次开发-开发环境搭建

    环境:win7+pycharm 2018.2 +redash 1.安装pycharm并如何正常使用,找度娘. 2.配置pycharm vcs,设置github用户,从github新建redash项目 ...

  3. 413. Reverse Integer【LintCode java】

    Description Reverse digits of an integer. Returns 0 when the reversed integer overflows (signed 32-b ...

  4. 廖雪峰git笔记

    查看本地机子的在Git上的名字和邮箱:git config user.namegit config user.email 对所有仓库指定相同的用户名和Email地址:git config --glob ...

  5. rhel6 mysql skip-grant-tables 添加用户报错 ERROR 1290

    不小心把数据库密码忘掉了, 这个时候我们只需要在数据库的配置文件里面添加 skip-grant-tables 然后重新启动服务,再登录数据库就不要我们输入密码了 这个时候我成功登录数据,可是不小心又把 ...

  6. php 通过curl上传图片

    通过curl上传图片 PHP < 5.5: 使用 目前使用的php版本 7.1 测试无法使用 前面加@ 的方法上传文件 ,查找资料 使用 curl_setopt($ch,CURLOPT_SAFE ...

  7. 查看struts包源码

  8. [codecademy]css

    Great work! You've learned the basics of CSS structure and syntax. We'll continue to build on these ...

  9. 第15章 磁盘配额(Quota)与高级文件系统管理

    磁盘配额(quota)的应用与实践 什么是quota 举例来说,用户的默认主文件夹是在/home下面,如果/home是个独立的分区,假设是10G,/home下有30个账号,这样30个用户共享这10G的 ...

  10. jQuery的2把利器

    <!-- $是一个函数,首先是给window添加$,然后该值是一个函数,函数返回的值是对象.1. jQuery核心函数 * 简称: jQuery函数($/jQuery) * jQuery库向外直 ...