题解 洛谷 P4336 【[SHOI2016]黑暗前的幻想乡】
生成树计数的问题用矩阵树定理解决。
考虑如何解决去重的问题,也就是如何保证每个公司都修建一条道路。
用容斥来解决,为方便起见,我处理时先将\(n\)减了1。
设\(f(n)\)为用\(n\)个公司,且不考虑每个公司都修建一条道路的要求,生成树的方案数。
应用容斥公式,那么答案\(ans=\sum\limits_{i=1}^n(-1)^{n-i}f(i)\)
那么我们枚举子集,用矩阵树定理计算求解即可。
实现细节看代码吧。
\(code:\)
#include<bits/stdc++.h>
#define maxn 20
#define maxm 410
#define mod 1000000007
using namespace std;
typedef long long ll;
template<typename T> inline void read(T &x)
{
x=0;char c=getchar();bool flag=false;
while(!isdigit(c)){if(c=='-')flag=true;c=getchar();}
while(isdigit(c)){x=(x<<1)+(x<<3)+(c^48);c=getchar();}
if(flag)x=-x;
}
ll n,all,sum,cnt;
ll a[maxn][maxn];
void add(int x,int y)
{
a[x][x]++,a[y][y]++;
a[x][y]--,a[y][x]--;
}
struct edge
{
int x,y;
};
struct node
{
ll num;
edge e[maxm];
}p[maxn];
ll det()
{
ll ans=1;
for(int i=1;i<=n;++i)
{
for(int j=i+1;j<=n;++j)
{
while(a[j][i])
{
ll d=a[i][i]/a[j][i];
for(int k=i;k<=n;++k)
a[i][k]=((a[i][k]-a[j][k]*d%mod)%mod+mod)%mod;
swap(a[i],a[j]),ans*=-1;
}
}
ans=ans*a[i][i]%mod;
}
return (ans%mod+mod)%mod;
}
int main()
{
read(n),n--,all=1<<n;
for(int i=1;i<=n;++i)
{
read(p[i].num);
for(int j=1;j<=p[i].num;++j)
read(p[i].e[j].x),read(p[i].e[j].y);
}
for(int s=1;s<all;++s)
{
cnt=0;
memset(a,0,sizeof(a));
for(int i=1;i<=n;++i)
{
if(s&(1<<(i-1)))
{
cnt++;
for(int j=1;j<=p[i].num;++j)
add(p[i].e[j].x,p[i].e[j].y);
}
}
sum=((sum+det()*((n-cnt)&1?-1:1))%mod+mod)%mod;
}
printf("%lld",sum);
return 0;
}
题解 洛谷 P4336 【[SHOI2016]黑暗前的幻想乡】的更多相关文章
- 洛谷P4336 [SHOI2016]黑暗前的幻想乡 [Matrix-Tree定理,容斥]
传送门 思路 首先看到生成树计数,想到Matrix-Tree定理. 然而,这题显然是不能Matrix-Tree定理硬上的,因为还有每个公司只能建一条路的限制.这个限制比较恶心,尝试去除它. 怎么除掉它 ...
- Solution -「SHOI2016」「洛谷 P4336」黑暗前的幻想乡
\(\mathcal{Description}\) link. 有一个 \(n\) 个结点的无向图,给定 \(n-1\) 组边集,求从每组边集选出恰一条边最终构成树的方案树.对 \(10^9+ ...
- P4336 [SHOI2016]黑暗前的幻想乡
P4336 [SHOI2016]黑暗前的幻想乡 矩阵树定理(高斯消元+乘法逆元)+容斥 ans=总方案数 -(公司1未参加方案数 ∪ 公司2未参加方案数 ∪ 公司3未参加方案数 ∪ ...... ∪ ...
- 题解 P4336 [SHOI2016]黑暗前的幻想乡
题解 前置芝士 :矩阵树定理 本题是一道计数题,有两个要求: 建造的公路构成一颗生成树 每条公路由不同的公司建造,每条公路与一个公司一一映射 那么看到这两个要求后,我们很容易想到第一个条件用矩阵树定理 ...
- Luogu P4336 [SHOI2016]黑暗前的幻想乡 矩阵树定理+容斥原理
真是菜到爆炸....容斥写反(反正第一次写qwq) 题意:$n-1$个公司,每个公司可以连一些边,求每个边让不同公司连的生成树方案数. 矩阵树定理+容斥原理(注意到$n$不是很大) 枚举公司参与与否的 ...
- [ZJOI2016]小星星&[SHOI2016]黑暗前的幻想乡(容斥)
这两道题思路比较像,所以把他们放到一块. [ZJOI2016]小星星 题目描述 小Y是一个心灵手巧的女孩子,她喜欢手工制作一些小饰品.她有n颗小星星,用m条彩色的细线串了起来,每条细线连着两颗小星星. ...
- 【BZOJ4596】[Shoi2016]黑暗前的幻想乡 容斥+矩阵树定理
[BZOJ4596][Shoi2016]黑暗前的幻想乡 Description 幽香上台以后,第一项措施就是要修建幻想乡的公路.幻想乡有 N 个城市,之间原来没有任何路.幽香向选民承诺要减税,所以她打 ...
- bzoj4596/luoguP4336 [SHOI2016]黑暗前的幻想乡(矩阵树定理,容斥)
bzoj4596/luoguP4336 [SHOI2016]黑暗前的幻想乡(矩阵树定理,容斥) bzoj Luogu 题解时间 看一看数据范围,求生成树个数毫无疑问直接上矩阵树定理. 但是要求每条边都 ...
- bzoj 4596 [Shoi2016]黑暗前的幻想乡 矩阵树定理+容斥
4596: [Shoi2016]黑暗前的幻想乡 Time Limit: 20 Sec Memory Limit: 256 MBSubmit: 559 Solved: 325[Submit][Sta ...
- bzoj4596[Shoi2016]黑暗前的幻想乡 Matrix定理+容斥原理
4596: [Shoi2016]黑暗前的幻想乡 Time Limit: 20 Sec Memory Limit: 256 MBSubmit: 464 Solved: 264[Submit][Sta ...
随机推荐
- GitHub 热点速览 Vol.25:距离优雅编程你差个它
作者:HelloGitHub-小鱼干 摘要:如何优雅地夸一个程序员呢?vscode-rainbow-fart 作为一个彩虹屁的项目,深得程序员心,能在你编程时疯狂称赞你的除了你自己,还有它.除了鼓励之 ...
- h5请求签名加密
签名说明 签名对 url + method + 业务参数 进行统一签名,防止重放和篡改 客户端js对加密逻辑和appSecret进行混淆加密处理,增加破解难度 客户端本地存储appid 和 appSe ...
- MySQL Workbench 8.0 目录汉化
<?xml version="1.0"?> <data> <value type="list" content-type=&quo ...
- 入门大数据---HBase Shell命令操作
学习方法 可以参考官方文档的简单示例来 点击查看 可以直接在控制台使用help命令查看 例如直接使用help命令: 从上图可以看到,表结构的操作,表数据的操作都展示了.接下来我们可以针对具体的命令使用 ...
- Redis高级特性
redis的事务(transaction) 转载:https://blog.csdn.net/fmwind/article/details/78065236 redis中的事务是一组命令的集合.事务同 ...
- 告别传统机房:3D 机房数据可视化实现智能化与VR技术的新碰撞
前言 随着各行业对计算机依赖性的日益提高,计算机信息系统的发展使得作为其网络设备.主机服务器.数据存储设备.网络安全设备等核心设备存放地的计算机机房日益显现出它的重要地位,而机房的环境和动力设备如供配 ...
- 看看有哪些 Web 认证技术.
BASIC 认证 BASIC 认证(基本认证)是从 HTTP/1.0 就定义的认证方式. BASIC 认证会将"用户名:密码"经过 Base64 加密后放入请求头部的 Author ...
- 使用 PostCSS 进行 CSS 处理
在 Web 应用开发中,CSS 代码的编写是重要的一部分.CSS 规范从最初的 CSS1 到现在的 CSS3,再到 CSS 规范的下一步版本,规范本身一直在不断的发展演化之中.这给开发人员带来了效率上 ...
- FarmCraft,又是Dp
题目依然链接 题意: 从根节点出发,每条边走两遍回到根节点,走边用时1,到达某个节点之后开始计时,到该节点最大的计时数时结束,回到根节点时根节点开始计时.求让所有计时都结束的最小时间. Solve: ...
- 大致掌握django的功能
目录 静态文件配置 request对象方法初识 pycharm链接数据库(mysql) django链接数据库(mysql) django orm 字段的增删查改 数据的增删查改 数据的查,改,删 d ...