bzoj 3812 状压dp 容斥原理

BZOJ 3812: 主旋律 (容斥状压+DAG计数理论) 题意: 有多少有向边的子集删去之后整个图仍然强联通。 n<=15, m<=n * (n-1) 上一次做弱化版:有多少有向边的子集使整个图没有环。 当时的做法是。。。。。。 ... 阅读详情

题意:一个n个点m条边的有向强连通图,去掉一些边使其仍然强连通,求方案数。

以前做的题,现在看已经不知道自己在写什么了。写一点题解。

如果一个图缩点后变成一个有多个点的DAG,那么这玩意一定不连通。

设f[i] 表示拆边使集合i强连通的方案数,g[i] 表示i集合的点缩点后成为奇数个彼此没有边的点的方案数,p[i] 表示缩成偶数个彼此没有边的点的方案数。

对于g[i] 和 p[i] ,枚举所在集合序号最大的点的所属强连通块:
g[i]=∑f[j]∗p[i−j]
f[i]=∑f[j]∗g[i−j]
其中j包含序号最大点。

对于f[i] 可以用总的方案数减缩成有多个点的DAG的方案数。
枚举缩点后出度为0的点集至少是多大。
由容斥原理得
f[i]=2edgei+∑(p[j]−g[j])∗2edge(i−j)−>i

#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
#define mod 1000000007
#define ll long long 
#define M (1<<16)+10
#define N 16
int f[M],g[M],p[M];
int cnt[N][M],bir[1100],ed[M];
int rev[M];
int n,m;
int t1,t2;
int main()
{
    scanf("%d%d",&n,&m);
    bir[0]=1;
    for(int i=0;i<n;i++)rev[1<<i]=i;
    for(int i=1;i<=m;i++)
    bir[i]=bir[i-1]*2%mod;
    for(int i=1;i<=m;i++)
    {
        scanf("%d%d",&t1,&t2);
        t1--;t2--;
        cnt[t1][1<<t2]++;
    }
    for(int i=1;i<(1<<n);i++)
    for(int j=0;j<n;j++)
    {   
        int t=i&(-i);
        cnt[j][i]=(cnt[j][i-t]+cnt[j][t])%mod;
    }
    for(int i=1;i<(1<<n);i++)
    for(int j=0;j<n;j++)
    if(i&(1<<j))
    ed[i]=(ed[i]+cnt[j][i])%mod;

    p[0]=1;
    for(int i=1;i<(1<<n);i++)
    {
        if(i==(i&(-i)))
        {
            f[i]=g[i]=1;
            continue;
        }
        f[i]=bir[ed[i]];
        for(int j=i&(i-1);j;j=(j-1)&i)
        {
            int t=i-j,tmp=0;
            for(int k=0;k<n;k++)
            if(t&(1<<k))tmp+=cnt[k][i];
            f[i]=(f[i]-(ll)bir[tmp]*g[j]%mod)%mod;
            f[i]=(f[i]+(ll)bir[tmp]*p[j]%mod)%mod;
            if(j&(i&(-i)))
            {
                g[i]=(g[i]+(ll)f[j]*p[t]%mod)%mod;
                p[i]=(p[i]+(ll)f[j]*g[t]%mod)%mod;
            }
        }
        f[i]=(f[i]-g[i])%mod;f[i]=(f[i]+p[i])%mod;
        g[i]=(g[i]+f[i])%mod;
    }
    f[(1<<n)-1]=(f[(1<<n)-1]%mod+mod)%mod;
    printf("%d\n",f[(1<<n)-1]);
    return 0;
}

【BZOJ3812】【状压DP】【容斥原理】主旋律 题解 Description响应主旋律的号召,大家决定让这个班级充满爱,现在班级里面有 n 个男生。 如果 a 爱着 b,那么就相当于 a 和 b 之间有一条 a→b 的有向边。如果这 n 个点的图是强联通的,那么就认为这个班级是充满爱的。 不幸的是,有一些不好的事情发生了,现在每一条边都可能被摧毁。我作为爱的使者,想知道有多少种摧毁的方式,使得这个班级任然充满爱呢?(说人话就是有多少边的子集删去之后 阅读详情

相关推荐

【清华集训2014】【BZOJ3812】主旋律

Description响应主旋律的号召,大家决定让这个班级充满爱,现在班级里面有 n 个男生。 如果 a 爱着 b,那么就相当于 a 和 b 之间有一条 a→b 的有向边。如果这 n 个点的图是强联通的,那么就认为这个班级是充满爱的。 不幸的是,有一些不好的事情发生了,现在每一条边都可能被摧毁。我作为爱的使者,想知道有多少种摧毁的方式,使得这个班级任然充满爱呢?(说人话就是有多少边的子集删去之后

CreationAugust is 14 years old forever 2678

新装Ubuntu后必做的第一件事:5分钟搞定SSH和MobaXterm远程连接(避坑UFW防火墙)

本文详细介绍了在新装Ubuntu系统上快速配置SSH服务并使用MobaXterm进行远程连接的完整流程。重点解析了UFW防火墙配置中的常见陷阱,包括端口放行、服务级规则管理等实用技巧,帮助开发者5分钟内完成安全可靠的远程访问设置。

weixin_33712987的博客 592

5分钟搞定阿里云千问大模型API申请:手把手教你获取API Key

本文提供了一份高效的阿里云通义千问大模型API Key获取实战指南。通过清晰的步骤,帮助开发者在五分钟内完成从账号准备、精准导航控制台到创建并验证API Key的全过程,并强调了密钥安全管理和基础调用测试的重要性,助力快速集成AI能力。

ol789012345的博客 1352

BZOJ 3812: 主旋律 状压dp 容斥原理

3812: 主旋律Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 332  Solved: 269[Submit][Status][Discuss]Description响应主旋律的号召,大家决定让这个班级充满爱,现在班级里面有 n 个男生。如果 a 爱着 b,那么就相当于 a 和 b 之间有一条 a→b 的有向边。如果这 n 个点的图是强联通的,那...

BlackJack 742

renderdoc的使用

renderdoc可以用来捕获帧渲染情况,排查一些GPU渲染、资源规格等问题。 下面讲述一些该软件连接真机调试使用。 一、下载安装renderdoc 软件的下载地址:https://renderdoc.org/可直接点击下载即可。该软件是开源免费的,不用破解。 下载后直接安装即可使用。 二、打开使用renderdoc 打开界面后,默认的界面布局如下图所示,(这里我已经设置了黑色主题,可以忽略这点),renderdo中主要的窗口有Texture Viewer(纹理查看器)、Event B.

x_xingduo_2315的博客 2万+

DS18B20温度传感器项目实战:从驱动编写到LCD显示,打造你的第一个温控系统

本文详细介绍了如何使用DS18B20温度传感器和LCD1602显示屏构建一个完整的温控系统。从硬件连接、OneWire协议实现到温度数据采集与LCD显示,全面解析了系统整合与工程化实现的关键步骤,帮助开发者快速掌握嵌入式温度监测系统的开发技巧。

weixin_42525328的博客 349

bzoj3812 主旋律(容斥原理+状压dp)

题目链接 分析: dada的题解 有多少个边的子集删去之后整个图仍然强联通=&gt;整个图有多少个强联通子图 强联通子图的个数比较难计算,我们考虑进行进一步的转化: 强联通子图的个数=&gt;子图个数-不强联通的子图个数 不强联通的子图有什么特点呢?将强连通分量缩点后会形成一个节点数&gt;=2的DAG 那么我们就考虑这个子问题:一些点构成 DAG 的方案数 设原图为GGG,点集为...

Coco_T的博客 493

机场数据治理系列介绍(1):机场行业数据中台中的数据管理顶层设计方案

民航机场行业的数据中台中,有关数据管理顶层设计方案需要结合机场行业的业务特点和技术需求进行具体的设计,今日我们简要考量设计提供一个参考方案:

机场信息系统研究员的专栏 1604

bzoj 3812: 主旋律(容斥原理+DP)

题目描述传送门题目大意:有多少边的子集删去之后整个图仍然强联通题解直接求强联通的子图不是很好求,所以我们考虑用子图的个数-不强联通的子图个数。 不强联通的子图有什么特点呢?将强连通分量缩点后会形成一个节点数>=2的DAG。 一个DAG肯定由一些没有出度的点构成,那么我们可以考虑枚举没有出度的点的子集T。那么S-T中的边和S-T 到T之间的边也可以随便连。但是我们这样连出来不能保证S-T中没有出度

clover_hxy的博客 626

Python自动化脚本:模拟鼠标键盘保持电脑在线状态

在计算机自动化领域,模拟用户输入是一项基础且实用的技术,其核心原理是通过程序生成鼠标或键盘事件来与操作系统交互。这项技术的价值在于能够自动化重复性操作,提升工作效率,并解决特定场景下的系统交互问题。PyAutoGUI作为Python生态中广泛使用的自动化库,封装了跨平台的底层API调用,为开发者提供了简洁统一的接口来实现输入模拟。在实际工程实践中,这类技术常应用于自动化测试、远程办公辅助、数据抓取等场景,帮助用户保持系统活跃状态,防止因无操作导致的锁屏或休眠中断任务。通过合理配置移动间隔和随机化模式,可以更

weixin_28713299的博客 578

手游功耗优化:从猜想到硬核实测

功耗本质是“硬件在吃电”,要看电流/功率曲线,而不是只看帧率和温度;定量 = 有数字、有曲线、有对比能说“降了 15%”、“峰值从 7W 降到 5.5W”,而不是“我感觉凉快点”;工具方面:大厂会用外接功率仪 + 手机/芯片厂内部平台;平时也会用 Android/iOS/引擎自带的工具做趋势分析;流程上:选典型机型和场景 → 跑脚本采集 → 对齐 Profiler 数据 → 分析 CPU/GPU/网络谁在吃电;再通过版本对比、画质/帧率组合测试,指导配置和优化。这是一个。

本博客聚焦游戏开发技巧、创业实战心得及大学热门课程干货。这里既有技术深度,也有思维广度,无论你是开发者、创业者还是高校学子,都能在这里找到适合自己的成长之路! 180

BZOJ3812 主旋律 状压dp 容斥原理

题目链接 题意: 给你一个nnn个点mmm条边的有向图,无重边自环,求删去一个边集之后整个图强连通的方案数。n&amp;lt;=15,m&amp;lt;=n(n−1)n&amp;lt;=15,m&amp;lt;=n(n-1)n&lt;=15,m&lt;=n(n−1)。 题解: 这个数据范围一看就很状压,大概率是个3n3^n3n的题,然而这个题确实是3n3^n3n的。 我们先考虑是直接算答案还是用总...

forever_shi的博客 285

《多模态融合改进》目录一览 | 专栏介绍 :全网 第一份 完整的多模态改进教程,提供《多模态模型改进完整项目包》-开箱即用

在大家订阅专栏后,便可获得多模态模型改进完整项目包-开箱即用,方便简单

Limiiiing的博客 1万+

[BZOJ3812][UOJ#37][清华集训2014]主旋律(状压 DP + 容斥原理)

Address BZOJ 3812 UOJ #37 Solution 考虑状压 DP ,定义状态 f[S]f[S]f[S] 表示原图的点集 SSS 的导出子图中,有多少个边子集能强连通点集 SSS g[S]g[S]g[S] 表示将原图的点集 SSS 分割成一些非空子集,每个点子集分别用其内部的边将其强连通的方案数,分成的子集个数为奇数时计入 g[S]g[S]g[S] ,子集个数为偶数时从 g...

女装的你,如此好看! 423

2022年全国职业院校技能大赛网络系统管理赛项模块A:网络构建(样题5)-网络部分解析-附详细代码

2022年全国职业院校技能大赛网络系统管理赛项模块A:网络构建(样题5)-网络部分解析-附详细代码

bfq05234214的博客 416

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

BZOJ 3812 主旋律 状压DP+容斥原理

题目大意:给定一张有向图,求这张有向图的生成子图中有多少强连通图 正着做不好做,我们考虑容斥原理 如果一个图不连通,那么这张图缩点之后一定会形成一个点数>=2的DAG 一个DAG中一定会有一些入度为0的点,我们枚举这些点的点集进行容斥 具体DP方程和细节见代码 注释写的还是比较详细的我就不多说了= = #include #include #include #include #

世界 3403

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

bzoj 3812: 主旋律 状压dp+容斥原理

题意 响应主旋律的号召,大家决定让这个班级充满爱,现在班级里面有 n 个男生。 如果 a 爱着 b,那么就相当于 a 和 b 之间有一条 a→b 的有向边。如果这 n 个点的图是强联通的,那么就认为这个班级是充满爱的。 不幸的是,有一些不好的事情发生了,现在每一条边都可能被摧毁。我作为爱的使者,想知道有多少种摧毁的方式,使得这个班级任然充满爱呢?(说人话就是有多少边的子集删去之后整个图仍然强

beginend 569

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

BZOJ3812 主旋律(状压dp+容斥原理)

  设f[S]为S点集是SCC的方案数。考虑通过去掉不合法方案转移。可以枚举入度为0的SCC所含点集S',这样显然S^S'内部的边和由S'连向S^S'的边删还是不删任选。但是这样无法保证S'包含所有入度为0的SCC,于是考虑容斥,瞎猜可以得到容斥系数与SCC数量有关,于是设g[i][S]为S包含i个无关SCC的方案数,转移有f[S]=2cnt(S)-Σ(-1)j*g[j][S']*2cnt(S^S...

weixin_30882895的博客 187

bzoj 3812: 主旋律 [容斥原理 状压DP]

3812: 主旋律 题意:一张有向图,求它的生成子图是强连通图的个数。\(n \le 15\) 先说一个比较暴力的做法。 终于知道n个点图的是DAG的生成子图个数怎么求了。 暴力枚举哪些点是一个scc,然后缩点,枚举入度为0的点,容斥原理dp DAG个数 \[ d(S) = \sum_{T \subset S, T \neq \varnothing}(-1)^{\mid T\mid-1}2^{w...

weixin_34174132的博客 164

【uoj#37/bzoj3812】[清华集训2014]主旋律 状压dp+容斥原理

题目描述 求一张有向图的强连通生成子图的数目对 $10^9+7$ 取模的结果。 题解 状压dp+容斥原理 设 $f[i]$ 表示点集 $i$ 强连通生成子图的数目,容易想到使用总方案数 $2^{sum[i]}$ 减去不为强连通图的方案数得到强连通图的方案数,其中 $sum[i]$ 表示点集 $i$ 中边的数目。 考虑什么样的图不是强连通图:缩点后入度为0的强连通分量对应的点...

weixin_30901729的博客 191

bzoj3812 主旋律(图论+状压dp+容斥原理)

题目给出一个 n 个点,m 条边的有向图,要求求出删掉一些边以后,整个图强联通的方案数,其中 n≤15,m≤n(n−1) 好难啊qaq 题解传送门:portal 实现上也有一些技巧要注意qaq #include &lt;bits/stdc++.h&gt; using namespace std; #define ll long long #define inf 0x3f3f3f3f #def...

Icefox的博客 464

BZOJ 3812 主旋律 (状压DP+容斥) + NOIP模拟赛 巨神兵(obelisk)(状压DP)

这道题跟另一道题很像,先看看那道题吧 巨神兵(obelisk) 题面 欧贝利斯克的巨神兵很喜欢有向图,有一天他找到了一张nnn个点mmm条边的有向图。欧贝利斯克认为一个没有环的有向图是优美的,请问这张图有多少个子图(即选定一个边集)是优美的?答案对 1,000,000,0071,000,000,0071,000,000,007 取模。 n&amp;lt;=17n&amp;lt;=17n&lt;...

Ark 987

BZOJ 3812: 主旋律【状压dp+容斥

题解我就服这个大佬QAQ   http://blog.miskcoo.com/2015/05/bzoj-3812 简洁明了还赏心悦目,miskcoo家的题解超棒啊【跪在地上表白大佬 忽然很想自己搭blog【趴 良心样例啊 我怀疑是因为前几天立的flag233333 当时磕了【k个连通块】就表示,磕主旋律…………于是肝了几天,被坐在右边颓废的jq挂起来裱233

Flaze_的博客 1150
上一篇: bzoj 3622 容斥原理
下一篇: bzoj 2669 状压dp 容斥原理
make_it_for_good
博客等级 码龄11年 13粉丝 183原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值