【Shoi2016】黑暗前的幻想乡

Luogu P4336 [SHOI2016]黑暗前的幻想乡(容斥,矩阵树定理,子集反演) 整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 Luogu P4336 [SHOI2016]黑暗前的幻想乡(容斥,矩阵树定理) Problem n≤17,P=109+7n\le 17, P = 10^9+7n≤17,P=109+7 Solution 题目就是要求由 n−1n-1n−1 个公司每个公司一条边建成的生成树的方案数。 显然求生成树的方案数,我们直接用矩阵树定理计算即可。 现在考虑满足 每个公司都只负责一条边的方案数 如何计算。 显然有:n≤ 阅读详情

时间限制 : 2000 MS 空间限制 : 256 MB

问题描述

四年一度的幻想乡大选开始了,最近幻想乡最大的问题是很多来历不明的妖怪涌入了幻想乡,扰乱了幻想乡昔日的秩序。但是幻想乡的建制派妖怪(人类)博丽灵梦和八云紫等人整日高谈所有妖怪平等,幻想乡多元化等等,对于幻想乡目前面临的种种大问题却给不出合理的解决方案。
风见幽香是幻想乡里少有的意识到了问题严重性的大妖怪。她这次勇敢地站了出来参加幻想乡大选,提出包括在幻想乡边境建墙(并让人类出钱),大力开展基础设施建设挽回失业率等一系列方案,成为了大选年出人意料的黑马并顺利地当上了幻想乡的大统领。
幽香上台以后,第一项措施就是要修建幻想乡的公路。幻想乡一共有 n 个城市,之前原来没有任何路。幽香向选民承诺要减税,所以她打算只修n−1条公路将这些城市连接起来。但是幻想乡有正好n−1个建筑公司,每个建筑公司都想在修路地过程中获得一些好处。虽然这些建筑公司在选举前没有给幽香钱,幽香还是打算和他们搞好关系,因为她还指望他们帮她建墙。所以她打算让每个建筑公司都负责一条路来修。
每个建筑公司都告诉了幽香自己有能力负责修建的路是哪些城市之间的。所以幽香打算 n−1条能够连接幻想乡所有城市的边,然后每条边都交给一个能够负责该边的建筑公司修建,并且每个建筑公司都恰好修建一条边。
幽香现在想要知道一共有多少种可能的方案呢?两个方案不同当且仅当它们要么修的边的集合不同,要么边的分配方式不同。

输入格式

第一行包含一个整数 n,表示城市个数。 接下来 n−1行,第 i 行表示 第 i 个建筑公司可以修建的路的列表:以一个非负数mi开头,表示其可以修建 mi条路;接下来有 mi对数,每对数表示一条边的两个端点。其中不会出现重复的边,也不会出现自环。

输出格式

输出一行一个整数,表示所有可能的方案数对 10^9+7 取模的结果。

样例输入

4
2 3 2 4 2
5 2 1 3 1 3 2 4 1 4 3
4 2 1 3 2 4 1 4 2

样例输出

17

提示

n<=17

题解

矩阵树定理可以解决重边的情况,那么本题就很水了。每个公司至少修一条路,在一次生成树计数中无法全部保证,就用容斥原理O(2n)O(2n)暴力计算即可。在很多计数问题中,约束条件无法在一次计算中全被保证,且约束个数较少,就可用容斥原理套路解决。

代码

#include<stdio.h>
#include<algorithm>
#include<iostream>
#include<cstdlib>
#include<cstring>
#include<vector>
#include<cmath>
using namespace std;
typedef long long ll;
typedef pair<ll,ll> pll;
const ll mod=1e9+7;
ll a,b,n,m,ans,cnt[20],G[20][20];
vector<pll> cache[20];
ll Gauss(ll n)
{
    ll det=1,flag=0;
    for(ll i=1;i<=n;i++)
    {
        for(ll j=i+1;j<=n;j++)
            while(G[j][i])
            {
                ll t=G[i][i]/G[j][i];
                for(ll k=i;k<=n;k++) G[i][k]=(G[i][k]-t*G[j][k]%mod+mod)%mod;
                swap(G[i],G[j]),flag^=1;
            }
        det=det*G[i][i]%mod;
    }
    if(flag) det=mod-det;
    return (det%mod+mod)%mod;
}
int main()
{
    scanf("%lld",&n);
    for(ll i=1;i<n;i++)
    {
        scanf("%lld",&m);
        for(ll j=1;j<=m;j++) scanf("%lld%lld",&a,&b),cache[i].push_back(make_pair(a,b));
    }
    cnt[n-1]=1;
    for(ll i=n-2;i;i--) cnt[i]=-cnt[i+1];
    for(ll S=(1<<n-1)-1;S;S--)
    {
        ll tot=0;
        memset(G,0,sizeof(G));
        for(ll i=1;i<n;i++)
            if(S&(1<<(i-1)))
                {
                    for(ll j=0;j<cache[i].size();j++)
                    {
                        ll f=cache[i][j].first,s=cache[i][j].second;
                        G[f][s]--,G[s][f]--,G[f][f]++,G[s][s]++;
                    }
                    tot++;
                }
        ans=(ans+cnt[tot]*Gauss(n-1)%mod+mod)%mod;
    }
    printf("%lld\n",ans);
    return 0;
}
数据库decimal类型详解:精度、标度与金额计算避坑指南 在关系型数据库中,浮点数精度丢失是常见问题,尤其涉及金额计算时,一分钱误差都可能导致对账失败。decimal类型通过十进制存储方式,将小数当作定点数处理,避免了二进制转换误差,确保运算结果精确。其核心在于精度和标度的合理定义,以及运算舍入规则的控制。在电商订单、汇率转换、税务计算等场景中,decimal是保障数据准确性的关键技术。理解其存储原理和实操细节,能有效规避隐式转换、聚合函数精度等常见坑点,提升系统可靠性。 阅读详情

相关推荐

间充质干细胞衰老机制与抗衰老干预策略研究

干细胞技术在再生医学领域具有广阔应用前景,其中间充质干细胞(MSCs)因其多向分化潜能和免疫调节特性备受关注。细胞衰老是影响干细胞治疗效果的共性难题,表现为增殖能力下降、端粒缩短等特征。通过表观遗传学分析发现,衰老MSCs存在DNA甲基化异常和组蛋白修饰改变;线粒体功能障碍导致ATP产量锐减,ROS累积显著增加。针对这些机制,研究者开发了包括小分子化合物筛选、CRISPR基因编辑和三维培养优化在内的多种干预策略。这些技术在组织修复、抗衰老治疗等应用场景中展现出重要价值,例如可提升心肌梗死修复效率2.3倍,缩

weixin_33502772的博客 229

[SHOI 2016] 黑暗前的幻想乡(矩阵树定理 + 容斥) | 错题本

文章目录题目分析错因代码 题目 [SHOI2016] 黑暗前的幻想乡 分析 把问题转化为“每个公司都要参与”的方案数。 假设现在只有 3 个公司,我们先算总方案数,减掉 1 公司不参与的方案数,减掉 2 公司不参与的方案数,减掉 3 公司不参与的方案数,这时候还不是答案,因为我们把 1、2 公司都不参与的方案数,2、3 公司都不参与的方案数和 3、4 公司都不参与的方案数多减了一次(例如:减掉 1 公司不参与的方案数、减掉 2 公司不参与的方案数后,1、2 公司都不参与的方案数被减了两次),所以要把它们加回

ixRic 303

Node框架之NestJS入门学习

文章主要分为三部分:1 NestJS 与Egg对比2 NestJS 基础知识介绍3 使用NestJS快速搭建应用,实现CURD操作e-link文档Egg官网NestJS 官网NestJS中文文档(非官方)

十九万里的博客 4742

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

4596: [Shoi2016]黑暗前的幻想乡 Time Limit: 20 Sec  Memory Limit: 256 MB Submit: 212  Solved: 135 [Submit][Status][Discuss] Description 四年一度的幻想乡大选开始了,最近幻想乡最大的问题是很多来历不明的妖 怪涌入了幻想乡,扰乱了幻想乡昔日的秩序。但是幻想乡的建制派妖

CRZbulabula的博客 1120

手把手教你编写PCIe设备驱动:基于Linux内核的实战教程

本文详细介绍了基于Linux内核的PCIe设备驱动开发全流程,包括环境准备、设备探测、中断处理、DMA配置等核心内容。通过实战代码示例和Makefile编写指南,帮助开发者快速掌握PCIe驱动开发技术,实现高性能设备驱动开发与优化。

weixin_30687051的博客 194

基于SAGE算法的宽带信道参数估计算法的MATLAB仿真

本文将介绍如何使用MATLAB进行SAGE算法的仿真,以便更好地理解和应用该算法。SAGE算法是一种基于最大期望(Expectation-Maximization)方法的迭代估计算法,用于估计未知的参数。在宽带信道参数估计中,SAGE算法通过迭代优化来估计信道的传输函数。总结起来,本文介绍了如何使用MATLAB进行基于SAGE算法的宽带信道参数提取算法的仿真。通过以上步骤,我们可以得到估计的信道响应,并与真实信道响应进行比较。此外,SAGE算法还可以与其他信道估计算法相结合,以提高估计的准确性和性能。

CodeRoarX的博客 1076

bzoj4596: [Shoi2016]黑暗前的幻想乡

4596: [Shoi2016]黑暗前的幻想乡 Time Limit: 20 Sec  Memory Limit: 256 MB Submit: 92  Solved: 60 [Submit][Status][Discuss] Description 四年一度的幻想乡大选开始了,最近幻想乡最大的问题是很多来历不明的妖 怪涌入了幻想乡,扰乱了幻想乡昔日的秩序。但是幻想乡的建制派妖怪(

qq_30324855的博客 1238

YOLO26优化:注意力魔改 | EMA:基于跨空间学习的高效多尺度注意力,效果优于ECA、CBAM、CA

加入EMA注意力,一种基于跨空间学习的高效多尺度注意力,效果优于ECA、CBAM、CA等经典注意力。

①答疑群聊服务;②YOLO大模型知识问答系统;③计算机视觉论文生成智能体; 334

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

题意有n个点,n-1个公司,每个公司可以生产一些固定的边。问每一条边都让不同的公司来制造的生成树数量是多少。 n<=17分析一直在想状压了,没想到矩阵树定理和容斥。按照某大神说的,看到计数想容斥。 那么我们就来想容斥吧! 那么总方案就相当于任意选的方案-1个公司不选的方案+2个公司不选的方案。。。。 那么就可以用搜索来容斥,算方案的时候可以用矩阵树定理来算。算行列式的时候由于是整数间的运算,

beginend 753

【推荐100个unity插件之2】 DoTween动画插件的安装和使用整合(最全)

摘要:DOTween动画插件使用指南 DOTween是Unity中强大的动画插件,比原生动画更便捷。安装后需进行初始化设置,通过工具菜单生成程序集。主要提供通用方法(DOTween.To)和便捷方法(如transform.DOMove)两种动画实现方式。插件支持丰富的动画设置(循环、缓动等)和事件回调(OnComplete、OnKill)。还提供动画管理功能,包括清除(DOTween.Clear)、完成(DOTween.CompleteAll)和终止(DOTween.KillAll)动画。常用功能涵盖移动、

向宇的博客,专注php/web全栈 unity游戏开发,欢迎大家评论纠错 1万+

二极管钳位电路、限幅电路和检波电路Multisim电路仿真

本文系统介绍了二极管钳位、限幅和检波三种基础电路的工作原理及Multisim仿真验证。钳位电路通过电容-二极管配合实现波形整体平移,将波峰或波谷固定在指定电压;限幅电路利用二极管导通特性削除信号超出设定阈值的部分;检波电路则通过半波整流和电容滤波从调幅波中提取音频信号。三种电路均通过Multisim仿真验证了理论分析结果,展示了二极管在信号处理中的关键作用。这些基础电路广泛应用于信号调理、电平保护和通信解调等领域。

XU157303764的博客 1125

luogu [SHOI2016]黑暗前的幻想乡

背景: hehe...hehe...hehe... 题目传送门: https://www.luogu.org/problemnew/show/P4336 题意: 有nnn个城市,(n−1)(n-1)(n−1)支工程队,每一支工程队可以修筑一定的道路。现在要修建(n−1)(n-1)(n−1)条道路连接这些城市,求方案数。 思路: 考虑容斥去重(对于修边集合一样的需要去重)。 ans=选n...

zsyz_ZZY的博客 259

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

「SHOI2016」黑暗前的幻想乡 解题报告

「SHOI2016」黑暗前的幻想乡 sb题想不出来,应该去思考原因,而不是自暴自弃 一开始总是想着对子树做dp,但是状态压不起去,考虑用容斥消减一些条件变得好统计,结果越想越乱。 期间想过矩阵树定理,但没想清楚又被我忽略了。 其实非常简单 你对着所有的东西跑一遍生成树计数,然后你发现统计了同一个施工队的方案,然后发现可以枚举子集,就是个sb容斥了 Code: #include <cstdi...

weixin_30879833的博客 146

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

P4336 [SHOI2016]黑暗前的幻想乡

P4336 [SHOI2016]黑暗前的幻想乡 矩阵树定理(高斯消元+乘法逆元)+容斥 ans=总方案数 -(公司1未参加方案数 ∪ 公司2未参加方案数 ∪ 公司3未参加方案数 ∪ ...... ∪ 公司n未参加方案数) 方案数=生成树方案数 所以用矩阵树定理瞎搞 显然后面的部分可以用容斥原理求解 枚举的时候用一个数转成二进制来表示哪些公司参加/不参加 mod=1e9+7是质...

dingqiongliang0363的博客 168

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

BZOJ4596: [Shoi2016]黑暗前的幻想乡【矩阵树定理】

4596: [Shoi2016]黑暗前的幻想乡 考虑矩阵树定理,但是不能解决十分选择了n-1个公司,所以我们可以容斥,总方案数-一个公司不选+两个公司不选-… #include<cstdio> #include<cstring> #include<algorithm> using namespace std; const int MOD=1e9+7; int n...

XSamsara的博客 AFO 169

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

4596: [Shoi2016]黑暗前的幻想乡 Time Limit:20 SecMemory Limit:256 MBSubmit:679Solved:398 Description 四年一度的幻想乡大选开始了,最近幻想乡最大的问题是很多来历不明的妖 怪涌入了幻想乡,扰乱了幻想乡昔日的秩序。但是幻想乡的建制派妖怪(人类) 博丽灵梦和八云紫等人整日...

diaochiwei7015的博客 202

[SHOI2016]黑暗前的幻想乡

Description 四年一度的幻想乡大选开始了,最近幻想乡最大的问题是很多来历不明的妖 怪涌入了幻想乡,扰乱了幻想乡昔日的秩序。但是幻想乡的建制派妖怪(人类) 博丽灵梦和八云紫等人整日高谈所有妖怪平等,幻想乡多元化等等,对于幻想乡 目前面临的种种大问题却给不出合适的解决方案。 风间幽香是幻想乡里少有的意识到了问题的严重性的大妖怪。她这次勇敢的 站了出来参加幻想乡大选。...

aoanping0730的博客 109

BZOJ 4596: [Shoi2016]黑暗前的幻想乡

Description 四年一度的幻想乡大选开始了,最近幻想乡最大的问题是很多来历不明的妖 怪涌入了幻想乡,扰乱了幻想乡昔日的秩序。但是幻想乡的建制派妖怪(人类) 博丽灵梦和八云紫等人整日高谈所有妖怪平等,幻想乡多元化等等,对于幻想乡 目前面临的种种大问题却给不出合适的解决方案。 风间幽香是幻想乡里少有的意识到了问题的严重性的大妖怪。她这次勇敢的 站了出来参加幻想乡大选。提出包括在幻想...

ypxrain的博客 474

BZOJ4596 [Shoi2016]黑暗前的幻想乡

KuribohG神犇说过,看到计数想容斥 把每个公司能负责的边都视作不同的,这样就变为生成树中每个集合里选一个的方案数 考虑容斥,每个集合选一个的等于任意选的方案数-sigma i一定没选的+sigma i,j一定没选的+…… 2^n枚举那些是一定不选的,每次用matrix-tree算方案,容斥加起来 #include #include #include #include #include

neither_nor 2021

[bzoj4596][SHOI2016]黑暗前的幻想乡

题目描述四年一度的幻想乡大选开始了,最近幻想乡最大的问题是很多来历不明的妖 怪涌入了幻想乡,扰乱了幻想乡昔日的秩序。但是幻想乡的建制派妖怪(人类) 博丽灵梦和八云紫等人整日高谈所有妖怪平等,幻想乡多元化等等,对于幻想乡 目前面临的种种大问题却给不出合适的解决方案。 风间幽香是幻想乡里少有的意识到了问题的严重性的大妖怪。她这次勇敢的 站了出来参加幻想乡大选。提出包括在幻想乡边境建墙(并让人类

不来也不去的一只失忆蝴蝶 920

SHOI 2016 黑暗前的幻想乡 题解

题目传送门 题目大意: 有 nnn 个点,n−1n-1n−1 个公司,每个公司能修某些给定的边,现在要求每个公司修一条边,然后使得 nnn 个点联通,问方案数。 题解 在你谷能紫了应该是因为用到了 Matrix−TreeMatrix-TreeMatrix−Tree 吧qwq 如果知道这个算法,那么这题其实再套一个简单的容斥即可:至少 000 个公司没路建−-−至少 111 个公司没路建+++至少 ...

a_forever_dream的博客 384

【SHOI2016】黑暗前的幻想乡

题面 题解 如果没有建筑公司的限制,那么就是个\(\mathrm{Matrix\;tree}\)板子 其实有了也一样 发现\(n\leq 17\),考虑容斥 每次钦定一些建筑公司,计算它们包含的边的生成树的方案数 复杂度\(\mathrm{O}(2^nn^3)\) 代码 #include<cstdio> #include<cstring> #include&lt...

weixin_30859423的博客 157
上一篇: 【HEOI2015】小Z的房间
下一篇: 【CodePlus 2017 12 月赛】白金元首与独舞
StrideTG
博客等级 码龄9年 4粉丝 38原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值