题目

P4336 [SHOI2016]黑暗前的幻想乡

做法

每种颜色恰好一条边,有点难处理啊

根据套路,数据范围这么小,容斥一下所有的情况就可以了

对每种颜色进行状压,表这次只能选这些颜色,做\(n-1\)的时候会加上多余的东西,就减去\(n-2......\)

剩下的交给矩阵树,这题有模数,高斯消元的时候逆元

My complete code

#include<cstring>
#include<string>
#include<iostream>
#include<algorithm>
#include<cstdio>
using namespace std;
typedef long long LL;
const LL maxn=19;
const LL p=1e9+7;
inline LL Read(){LL x(0),f(1); char c=getchar();while(c<'0'||c>'9'){if(c=='-')f=-1; c=getchar();}while(c>='0'&&c<='9')x=(x<<3)+(x<<1)+c-'0',c=getchar();return x*f;
}
LL n,ans;
LL m[maxn],size[1<<maxn];
LL D[maxn][maxn],eu[maxn][maxn*maxn],ev[maxn][maxn*maxn];
inline LL Pow(LL base,LL b){LL ret(1);while(b){if(b&1)ret=(ret*base)%p;base=base*base%p;b>>=1;}return ret;
}
inline LL Solve(){LL N=n-1,tr=0;for(LL i=1;i<=N;++i){LL mx=i;for(LL j=i+1;j<=N;++j)if(D[mx][i]<D[j][i])mx=j;if(D[mx][i]==0)return 0;if(mx!=i){tr^=1;swap(D[mx],D[i]);}for(LL j=i+1;j<=N;++j){LL tmp=D[j][i]*Pow(D[i][i],p-2)%p;for(LL k=i;k<=N;++k)D[j][k]=(D[j][k]-tmp*D[i][k]%p+p)%p;}}LL ret(1);for(LL i=1;i<=N;++i)ret=(ret*D[i][i])%p;if(tr)ret=p-ret;return ret;
}
int main(){n=Read();for(LL i=1;i<n;++i){m[i]=Read();for(LL j=1;j<=m[i];++j)eu[i][j]=Read(),ev[i][j]=Read();}LL Up=1<<(n-1);for(LL i=1;i<Up;++i)size[i]=size[i>>1]+(i&1);for(LL i=1;i<Up;++i){memset(D,0,sizeof(D));for(LL j=1,bit=i;bit;bit>>=1,++j){if((bit&1)==0)continue;for(LL k=1;k<=m[j];++k){LL u(eu[j][k]),v(ev[j][k]);++D[u][u],++D[v][v],D[u][v]=(D[u][v]+p-1)%p,D[v][u]=(D[v][u]+p-1)%p;}}ans=(ans+(( ((n-1-size[i])&1)==0)?Solve():-Solve())+p)%p;}printf("%lld\n",ans);return 0;
}

转载于:https://www.cnblogs.com/y2823774827y/p/10265056.html

P4336 [SHOI2016]黑暗前的幻想乡相关推荐

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

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

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

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

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

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

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

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

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

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

  6. SHOI2016 黑暗前的幻想乡

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

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

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

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

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

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

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

最新文章

  1. 制备pdms膜的方法_“轻若鸿毛”的新型高弹性石墨烯-PDMS传感器
  2. 自制操作系统学习笔记(1)-虚拟机启动软盘
  3. CSS精灵图合成工具
  4. 信息学奥赛一本通(1045:收集瓶盖赢大奖)
  5. 《『若水新闻』客户端开发教程》——04.设计新闻分类UI(2)
  6. data vue 全部重新渲染_vue将data恢复到初始状态 重新渲染组件实例
  7. 数值优化(二):信赖域方法与二维空间法
  8. 04_使用域名访问后台管理系统(Nginx)
  9. 迅雷极速版任务出错的解决办法(亲测可用)
  10. Filter过滤器:使用过滤器保护指定资源,只有登录用户才能访问。若访问内容时用户没有登录则跳转到登录页面。
  11. 小米等部分手机机型不弹出对话框问题
  12. 关于idea单元测试键盘无法输入的解决方法(终极版)
  13. i9 9900es版,QQC0满载功耗测试
  14. kubernetes(4)Pod的核心概念、Pod的调度
  15. c语言编程实现今日星期几,计算任何一天是星期几的C语言源代码.
  16. 打印机乱码故障解决办法
  17. Pixel: Multi-signatures for Consensus
  18. Java中的RSA加解密工具类:RSAUtils
  19. ubuntu 17linux输入法,Ubuntu17.04 安装搜狗中文输入法的方法
  20. 【ZooKeeper】大数据之分布式协调神器:ZooKeeper选举

热门文章

  1. django定时任务
  2. 设计模式之单件模式(Singleton Pattern)
  3. 华为内部面试题库---(6)
  4. nullnull使用PL/SQL获取创建用户的语句
  5. dos命令查看oracle_home,Oracle - OraDb10g_home1配置方法+DOS命令
  6. Java中使用log4j记录日志
  7. python做算法题优势_Python语言在科学算法中的优势
  8. 第三方软件要使用QQ邮箱进行发邮件相关设置
  9. php去除每行的重复文本,php删除文本文件中重复行的方法
  10. MATLAB中用FDATool设计滤波器及使用