正题

luogu
AT3634


题目大意

给你一个图,让你给图上的边定方向,问1,2两个点可以到同一个点的方案数


解题思路

直接求可以到同一个点不好求,可以用总方案数减去不合法方案数,即到不了同一个点的方案数

那么就是有若干点把1,2分开,设 f1/2,if_{1/2,i}f1/2,i​ 表示从 1/2 开始走,可以走到状态 i 中的点,这一部分直接求也不好求,考虑容斥

先计算出 i 中的边随意定向的方案数(记为s),然后枚举一个状态 j,表示只能到 j 的方案数,对于补集中的边随便选(因为无法到补集中的任何一个点,所以里面的边的方向不影响),那么有

f1/2,i=2si−∑f1/2,j×2si⊕jf_{1/2,i}=2^{s_i}-\sum f_{1/2,j}\times 2^{s_{i\oplus j}}f1/2,i​=2si​−∑f1/2,j​×2si⊕j​

得到 f 后枚举1,2个点能到的点即可


code

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define ll long long
#define N 400
#define M 100000
#define mod 1000000007
using namespace std;
ll n,m,k,ans,X[N],Y[N],pw[N],s[M],f[3][M];
int main()
{scanf("%lld%lld",&n,&m);k=(1<<n)-1;for(int i=1;i<=m;++i)scanf("%lld%lld",&X[i],&Y[i]);pw[0]=1;for(int i=1;i<=m;++i)pw[i]=pw[i-1]*2%mod;for(int i=0;i<=k;++i)for(int j=1;j<=m;++j)if((i&(1<<X[j]-1))&&(i&(1<<Y[j]-1)))s[i]++;for(int g=1;g<=2;++g)for(int i=0;i<=k;++i){if(!(i&(1<<g-1)))continue;f[g][i]=pw[s[i]];for(int j=i;j;j=(j-1)&i)f[g][i]=(f[g][i]-f[g][i^j]*pw[s[j]]%mod+mod)%mod;}ans=pw[m];for(int i=0;i<=k;++i)for(int j=k^i;j;j=(j-1)&(k^i))//点不能有交集if(s[i]+s[j]==s[i|j])//不存在边直接相连ans=(ans-f[1][i]*f[2][j]%mod*pw[s[k^(i|j)]]%mod+mod)%mod;printf("%lld",ans);return 0;
}

【DP】【容斥】Nice to Meet You(AT3634)相关推荐

  1. BZOJ2339: [HNOI2011]卡农(dp 容斥)

    题意 从$1 - n$中任意选择一些数,选$m$次构成$m$个集合 保证: 集合不为空 任意两个集合不相同 集合内各个元素xor起来等于0 Sol 神仙题Orz 我看到两种做法,一种是洛谷题解上的直接 ...

  2. CF296B dp\容斥

    传送门 文章目录 题意: 思路: 题意: n≤1e5n\le1e5n≤1e5 思路: 求方案数基本就是考虑dpdpdp了,看到nnn这么大可以考虑一下分情况讨论的dpdpdp状态. 设f[i][j]f ...

  3. [CQOI2012] 局部极小值(状压DP + 容斥 + 搜索)

    problem luogu-P3160 solution 这么小的数据范围,非暴力不状压.暴力 O(28!)O(28!)O(28!) 呵呵呵可以拉走了. 我们不妨从小到大填数字,这样如果局部极小值点还 ...

  4. P5405-[CTS2019]氪金手游【树形dp,容斥,数学期望】

    前言 话说在LojLojLoj下了个数据发现这题的名字叫fgofgofgo 正题 题目链接:https://www.luogu.com.cn/problem/P5405 题目大意 nnn张卡的权值为1 ...

  5. AT4352-[ARC101C] Ribbons on Tree【dp,容斥】

    正题 题目链接: https://www.luogu.com.cn/problem/AT4352 https://atcoder.jp/contests/arc101/tasks/arc101_c 题 ...

  6. bzoj 1042: [HAOI2008]硬币购物(dp+容斥)

    1042: [HAOI2008]硬币购物 Time Limit: 10 Sec  Memory Limit: 162 MB Submit: 2555  Solved: 1537 [Submit][St ...

  7. [LOJ#3119][Luogu5405][CTS2019]氪金手游(DP+容斥)

    先考虑外向树的做法,显然一个点在其子树内第一个出现的概率等于它的权值除以它子树的权值和.于是f[i][j]表示i的子树的权值和为j时,i子树内所有数的相互顺序都满足条件的概率,转移直接做一个背包卷积即 ...

  8. [LOJ#3124][CTS2019]氪金手游(概率 + 树形 DP + 容斥)

    Address 洛谷 P5405 LOJ #3124 Solution 先考虑如果以某个点(下面定为 111 )为根时,如果所有的限制二元组 (u,v)(u,v)(u,v) 都满足 uuu 是 vvv ...

  9. ARC101E Ribbons on Tree 树形dp 容斥

    题目链接 题意: 给你一棵nnn个点的树,nnn是偶数,把这些点分成n2\frac{n}{2}2n​个点对,每个点对会把路径上的所有边覆盖,问你每条边至少覆盖一次有多少种配对方式.n<=5000 ...

  10. bzoj 4455 [Zjoi2016]小星星 树形dp容斥

    4455: [Zjoi2016]小星星 Time Limit: 10 Sec  Memory Limit: 512 MB Submit: 643  Solved: 391 [Submit][Statu ...

最新文章

  1. java栈实现简易计算器算法
  2. java泛型学习一:解惑继承
  3. (原創) 如何讀取/寫入文字檔? (IC Design) (Verilog)
  4. scss百分号操作符的一个使用例子
  5. matlab中的方波信号图片_基于Matlab的雷达信号处理仿真
  6. [转载] 手工制作Win7 OEM版
  7. JavaScript MSN 弹出消息框
  8. 19个强大、有趣、又好玩的 Linux 命令!
  9. Python编程基础08:循环结构
  10. android常用的工厂模式,Android的设计模式-简单工厂模式
  11. TIOBE 3 月编程语言排行榜:主流 Java、C++ 惨遭嫌弃,Python 势头迅猛
  12. 如何保存windows聚焦壁纸
  13. 使用网刻工具进行局域网内的网络同传及联想电脑同传
  14. php阿拉伯数字转换大写,php 阿拉伯数字如何转大写
  15. aws80端口不能访问的问题
  16. 液晶显示屏的分辨率详解?
  17. Windows10当中的混合现实门户怎么使用 超详细讲解 win10混合现实门户怎么用?
  18. “宝付金融知识普及月”利益相关请务必关注
  19. C++学习笔记之数字输入及错误处理
  20. 地理信息系统矢量数据的组织形式 第一章:二维空间对象数据模型

热门文章

  1. java导入导出excel_Java导入导出Excel工具 easyexcel
  2. python3 for循环_从零开始学习PYTHON3讲义(六)for循环跟斐波那契数列
  3. Java 12 switch表达式新特性(->,yield)
  4. [Java基础]反射获取构造方法并使用练习
  5. [C++STL]C++实现list容器
  6. [剑指offer]面试题31:连续子数组的最大和
  7. 双端队列 BFS + Chamber of Secrets CodeForces - 173B
  8. Keywords Search HDU - 2222(AC自动机模板)
  9. Anaconda创建python虚拟环境
  10. JVM(3)——JVM类加载器