真是简单粗暴

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

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

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

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

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<vector>
  4. #include<cstring>
  5. using namespace std;
  6. const int N=20,mod=1e9+7;
  7. int n,a[N][N];
  8. long long ans;
  9. vector<pair<int,int> >v[N];
  10. int read()
  11. {
  12. int r=0,f=1;
  13. char p=getchar();
  14. while(p>'9'||p<'0')
  15. {
  16. if(p=='-')
  17. f=-1;
  18. p=getchar();
  19. }
  20. while(p>='0'&&p<='9')
  21. {
  22. r=r*10+p-48;
  23. p=getchar();
  24. }
  25. return r*f;
  26. }
  27. int gaosi(int n)
  28. {
  29. for(int i=1;i<=n;i++)
  30. for(int j=1;j<=n;j++)
  31. if(a[i][j]<0)
  32. a[i][j]+=mod;
  33. long long ans=1,f=1;
  34. for(int i=1;i<=n;i++)
  35. {
  36. for(int j=i+1;j<=n;j++)
  37. {
  38. long long x=a[i][i],y=a[j][i];
  39. while(y)
  40. {
  41. long long t=x/y;
  42. x%=y;
  43. swap(x,y);
  44. for(int k=i;k<=n;k++)
  45. a[i][k]=(a[i][k]-a[j][k]*t%mod+mod)%mod;
  46. for(int k=i;k<=n;k++)
  47. swap(a[i][k],a[j][k]);
  48. f=-f;
  49. }
  50. }
  51. if(a[i][i]==0)
  52. return 0;
  53. ans=ans*a[i][i]%mod;
  54. }
  55. return f==-1?(mod-ans)%mod:ans;
  56. }
  57. int main()
  58. {
  59. n=read();
  60. for(int i=1;i<n;i++)
  61. {
  62. int m=read();
  63. for(int j=1;j<=m;j++)
  64. {
  65. int x=read(),y=read();
  66. v[i].push_back(make_pair(x,y));
  67. }
  68. }
  69. for(int i=0;i<(1<<(n-1));i++)
  70. {
  71. int s=n-1,x=i;
  72. memset(a,0,sizeof(a));
  73. for(int j=1;j<n;j++,x>>=1)
  74. if(x&1)
  75. {
  76. s--;
  77. for(int k=0;k<v[j].size();k++)
  78. 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]--;
  79. }
  80. if(s&1)
  81. ans=(ans-gaosi(n-1))%mod;
  82. else
  83. ans=(ans+gaosi(n-1))%mod;
  84. }
  85. printf("%d\n",(ans+mod)%mod);
  86. return 0;
  87. }

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. 【Codeforces 1041D】Glider

    [链接] 我是链接,点我呀:) [题意] 题意 [题解] 二分. 枚举每一个上升区的起始位置作为起点(这样做肯定是最优的),然后如果没有掉在地上的话就尽量往右二分(只有上升区之间的间隙会让他往下掉) ...

  2. 【bzoj2152】聪聪可可 点分治

    [bzoj2152]聪聪可可 2014年9月7日3,5472 Description 聪聪和可可是兄弟俩,他们俩经常为了一些琐事打起来,例如家中只剩下最后一根冰棍而两人都想吃.两个人都想玩儿电脑(可是 ...

  3. 莫比乌斯反演套路二--(n/d)(m/d)给提出来--BZOJ3529: [Sdoi2014]数表

    一个数表上第i行第j列表示能同时整除i和j的自然数,Q<=2e4个询问,每次问表上1<=x<=n,1<=y<=m区域内所有<=a的数之和.n,m<=1e5,a ...

  4. 【Intellij】Intellij Idea 2017创建web项目及tomcat部署实战

    相关软件:Intellij Idea2017.jdk16.tomcat7 Intellij Idea直接安装(可根据需要选择自己设置的安装目录),jdk使用1.6/1.7/1.8都可以,主要是配置好系 ...

  5. Spring中通过java的@Valid注解和@ControllerAdvice实现全局异常处理。

    通过java原生的@Valid注解和spring的@ControllerAdvice和@ExceptionHandler实现全局异常处理的方法: controller中加入@Valid注解: @Req ...

  6. SAP EP 设置Portal别名安全模式

    Securing the Portal Alias Cookie Context We recommend that you set the portal alias cookie to be del ...

  7. 【.Net 学习系列】-- FileSystemWatcher 监控文件夹新生成文件,并在确认文件没有被其他程序占用后将其移动到指定文件夹

    监控文件夹测试程序: using System; using System.Collections.Generic; using System.IO; using System.Linq; using ...

  8. MongoDB小结04 - update【$inc】

    update方法很强大,它有两个参数,一是查询文档,用来找出需要更新的文档,另一个是修改器(modifier)文档,描述对找到的文档做哪些修改. 亮点 更新操作是原子的,若两个更新同时发生,先到达服务 ...

  9. MongoDB小结03 - insert、remove

    连接MongoDB(bin目录下) ./mongo 如果觉得shell里空空的可以输入help,在刷屏的同时大致了解下有哪些方法 help 现在咱们还没有数据库,咱们创建一个,任性起名:templat ...

  10. c语言有头循环单链表

    /************************************************************************* > File Name: singleLin ...