博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
luoguP4336 [SHOI2016]黑暗前的幻想乡 容斥原理 + 矩阵树定理
阅读量:5009 次
发布时间:2019-06-12

本文共 2080 字,大约阅读时间需要 6 分钟。

1326433-20181218191411335-104397127.png


自然地想到容斥原理

然后套个矩阵树就行了

求行列式的时候只有换行要改变符号啊QAQ

复杂度为\(O(2^n * n^3)\)


#include 
#include
#include
#include
using namespace std;#define ri register int#define rep(io, st, ed) for(ri io = st; io <= ed; io ++)#define drep(io, ed, st) for(ri io = ed; io >= st; io --)const int sid = 20;const int mod = 1e9 + 7;inline void inc(int &a, int b) { a += b; if(a >= mod) a -= mod; }inline void dec(int &a, int b) { a -= b; if(a < 0) a += mod; }inline int mul(int a, int b) { return 1ll * a * b % mod; }inline int inv(int a) { int ret = 1; for(int k = mod - 2; k; k >>= 1, a = mul(a, a)) if(k & 1) ret = mul(ret, a); return ret;} int N, ans;int M[sid], G[sid][sid];struct edge { int u, v; } E[sid][400];inline int Guass(int n) { int sign = 1; rep(i, 1, n) { int pos = i; rep(j, i + 1, n) if(G[j][i]) pos = j; swap(G[i], G[pos]); if(i != pos) sign *= -1; if(!G[i][i]) return 0; int Inv = inv(G[i][i]); rep(j, i + 1, n) { int t = mul(G[j][i], Inv); rep(k, i, n) dec(G[j][k], mul(G[i][k], t)); } } int ret = 1; rep(i, 1, n) ret = mul(ret, G[i][i]); if(sign == 1) return ret; else return mod - ret;}inline int calc(int S) { memset(G, 0, sizeof(G)); rep(i, 1, N - 1) { if(!(S & (1 << i - 1))) continue; rep(j, 1, M[i]) { int u = E[i][j].u, v = E[i][j].v; inc(G[u][u], 1); inc(G[v][v], 1); dec(G[u][v], 1); dec(G[v][u], 1); } } return Guass(N - 1);}inline void dfs(int o, int S, int num) { if(o == N) { if((N - 1 - num) & 1) dec(ans, calc(S)); else inc(ans, calc(S)); return; } dfs(o + 1, S, num); dfs(o + 1, S | (1 << o - 1), num + 1);} int main() { freopen("pp.in", "r", stdin); cin >> N; rep(i, 1, N - 1) { cin >> M[i]; rep(j, 1, M[i]) cin >> E[i][j].u >> E[i][j].v; } dfs(1, 0, 0); printf("%d\n", ans); return 0;}

转载于:https://www.cnblogs.com/reverymoon/p/10139163.html

你可能感兴趣的文章
深入理解JVM之内存区域与内存溢出
查看>>
DSAPI+DS控件库 Windows7风格控件演示
查看>>
面向对象高级
查看>>
Bitwise And Queries
查看>>
打印Ibatis最终的SQL语句
查看>>
HBase之八--(3):Hbase 布隆过滤器BloomFilter介绍
查看>>
oracle连接问题ORA-00604,ORA-12705
查看>>
NOI 2019 退役记
查看>>
java的几个日志框架log4j、logback、common-logging
查看>>
Java从零开始学十三(封装)
查看>>
文字笔记
查看>>
shell获取目录下(包括子目录)所有文件名、路径、文件大小
查看>>
【bzoj3524】[Poi2014]Couriers 主席树
查看>>
【bzoj1131】[POI2008]Sta 树形dp
查看>>
【bzoj3886】[Usaco2015 Jan]Moovie Mooving 状态压缩dp+二分
查看>>
【bzoj4998】星球联盟 LCT+并查集
查看>>
[daily][btrfs][mlocate][updatedb] mlocate不认识btrfs里面的文件
查看>>
WebLogic Exception
查看>>
Python2和Python3中的rang()不同之点
查看>>
MySQL的外键,修改表,基本数据类型,表级别操作,其他(条件,通配符,分页,排序,分组,联合,连表操作)...
查看>>