记$G[S]$表示图$G$在点集$S$上的导出子图,即$G[S]=(S,{(x,y)|x,y\in S且(x,y)\in E})$

定义$g(S)$为所有$E'$(满足$E'\subseteq G[S].E$)的图$G'=(S,E')$的染色方式之和,考虑枚举其中一种颜色的点集,则有$g(S)=\sum_{T\subseteq S}2^{|\{(x,y)|(x,y)\in E且x\in T且y\in C_{S}T\}|}$(这些边可以选或不选)

考虑计算$|\{(x,y)|(x,y)\in G[S].E且x\in T且y\in C_{S}T\}|$,可以看作$S$中边数-$T$中边数-$C_{S}T$中边数,$o(2^{n}m)$预处理出$|G[S].E|$,那么即$|G[S].E|-|G[T].E|-|G[C_{S}T].E|$

定义$f(S)$为有多少$E'$使得$E'\subseteq G[S].E$且$G'=(S,E')$为好图,那么$f(V)$即为答案

$f(S)$的计算略微比较复杂,定义$g'(S)$为所有不连通的$G'=(S,E')$(参考$g(S)$定义)的染色方式之和,容易发现有$f(S)=\frac{g(S)-g'(S)}{2}$(联通二分图有2种染色方式)

对于$g'(S)$,枚举$S$的某个$k$所属连通块,那么即有$g'(S)=\sum_{k\in T,T\subset S}f(T)g(C_{S}T)$($k$为$S$中任意一个元素,注意这里$T\ne S$)

上面的转移涉及到一个枚举子集的技巧,因此时间复杂度$o(3^{n}+2^{n}m)$

 1 #include<bits/stdc++.h>
2 using namespace std;
3 #define N 200005
4 #define M 1005
5 #define mod 998244353
6 int n,m,x,y,mi[M],e[M],se[N],g[N],f[N];
7 int main(){
8 scanf("%d%d",&n,&m);
9 mi[0]=1;
10 for(int i=1;i<=m;i++){
11 scanf("%d%d",&x,&y);
12 e[i]=((1<<x-1)|(1<<y-1));
13 mi[i]=mi[i-1]*2%mod;
14 }
15 for(int i=0;i<(1<<n);i++)
16 for(int j=1;j<=m;j++)se[i]+=((i&e[j])==e[j]);
17 for(int i=0;i<(1<<n);i++){
18 g[i]=1;
19 for(int j=i;j;j=((j-1)&i))g[i]=(g[i]+mi[se[i]-se[j]-se[i^j]])%mod;
20 }
21 for(int i=0;i<(1<<n);i++){
22 f[i]=g[i];
23 int k=i-(i&(i-1));
24 for(int j=i-k;j;j=((j-1)&i))
25 if (j&k)f[i]=(f[i]+mod-1LL*f[j]*g[i^j]%mod)%mod;
26 }
27 printf("%lld",f[(1<<n)-1]*(mod+1LL)/2%mod);
28 }

[atARC105F]Lights Out on Connected Graph的更多相关文章

  1. poj 1737 Connected Graph

    // poj 1737 Connected Graph // // 题目大意: // // 带标号的连通分量计数 // // 解题思路: // // 设f(n)为连通图的数量,g(n)为非连通图的数量 ...

  2. POJ1737 Connected Graph

    Connected Graph Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 3156   Accepted: 1533 D ...

  3. POJ 1737 Connected Graph 题解(未完成)

    Connected Graph Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 3156   Accepted: 1533 D ...

  4. Connected Graph

    Connected Graph 求n个点的无向联通图数量,\(n\leq 50\). 解 直接无向联通图做状态等于是以边点做考虑,难以去重,考虑联通对立面即不联通. 不难求出n个点的总方案数为\(2^ ...

  5. 【poj1737】 Connected Graph

    http://poj.org/problem?id=1737 (题目链接) 题意 求n个节点的无向连通图的方案数,不取模w(゚Д゚)w Solution 刚开始想了个第二类斯特林数,然而并不知道怎么求 ...

  6. 【Java】【高精度】【组合数】【递推】poj1737 Connected Graph

    http://blog.csdn.net/sdj222555/article/details/12453629 这个递推可以说是非常巧妙了. import java.util.*; import ja ...

  7. [poj1737]Connected Graph(连通图计数)

    题意:输出题中带有$n$个标号的图中连通图的个数. 解题关键: 令$f(n)$为连通图的个数,$g(n)$为非联通图的个数,$h(n)$为总的个数. 则$f(n) + g(n) = h(n)$ 考虑标 ...

  8. POJ 1737 Connected Graph(高精度+DP递推)

    题面 \(solution:\) 首先做个推销:带负数的压位高精度(加减乘+读写) 然后:由 \(N\) 个节点组成的无向图的总数为: \(2^{N*(N-1)/2}\) (也就是说这个图总共有 \( ...

  9. POJ 1737 Connected Graph (大数+递推)

    题目链接: http://poj.org/problem?id=1737 题意: 求 \(n\) 个点的无向简单(无重边无自环)连通图的个数.\((n<=50)\) 题解: 这题你甚至能OEIS ...

随机推荐

  1. 从零入门 Serverless | 函数计算如何粘合云服务,提供端到端解决方案

    作者 | 西流 阿里云技术专家 导读:阿里云 Serverless 产品函数计算可以作为粘合剂,串联其他云服务提供端到端解决方案,从而简化编程模型,快速实现最上层的业务目标. 传统单体应用的拆解 首先 ...

  2. 从零入门 Serverless | 使用 Spot 低成本运行 Job 任务

    作者 | 代志锋(云果)  阿里云技术专家 本文整理自<Serverless 技术公开课>,点击链接即可免费听课:https://developer.aliyun.com/learning ...

  3. 超详细的Eureka源码解析

    Eureka简介 Eureka是什么? Eureka是基于REST(Representational State Transfer)服务,主要以AWS云服务为支撑,提供服务发现并实现负载均衡和故障转移 ...

  4. python中的load、loads实现反序列化

    load与loads 简介: 在python自动化中,我们传递一些参数是需要从文件中读取过来的,读取过来的字典并非python对象数据类型而是string类型. 这样在我们传递参数的时候就会出现格式不 ...

  5. C++ 与 Visual Studio 2019 和 WSL(二)

    终端 A more integrated terminal experience | Visual Studio Blog (microsoft.com) Say hello to the new V ...

  6. SingleR如何使用自定义的参考集

    在我之前的帖子单细胞分析实录(7): 差异表达分析/细胞类型注释里面,我已经介绍了如何使用SingleR给单细胞数据做注释,当时只讲了SingleR配套的参考集.这次就讲讲如何使用自己定义/找到的基因 ...

  7. 求求你了,用Docker吧

    这是一个开始使用 Docker 的 Tutorial 大无语事件发生!大数据课实验课要用到Hadoop,实验指导是在一个Ubuntu虚机上通过安装包安装Hadoop并运行一个词频统计程序,整个实验就是 ...

  8. .Net2.0连接PG数据注意事项

    .Net2.0连接PG数据注意事项 第一次用.net操作PG[.NET2.0] 一:Npgsql版本问题 1:如果是.net2.0  建议用2.0.11.0[NuGet搜索npgsql第一个的最低版本 ...

  9. IDEA注释设置:从当前鼠标位置开始注释快捷键

    在写xml或html注释时,经常出现注释出来的时候都是顶格的,前面包含一大段空格,并没有在鼠标位置开始. 可在设置中进行修改,其他代码格式修改方法类似

  10. Noip模拟29(瞎眼忌) 2021.8.3

    T1 最长不下降子序列 在此记录自己的瞎眼... 考场上像一个傻$der$,自己为了防范上升序列和不下降序列的不同特意的造了一组$hack$数据来卡自己:(第一行是序列长度,第二行是序列) 6 1 5 ...