[atARC115D]Odd Degree
2024-08-28 13:31:25
考虑对于一棵树$G$,这个问题的答案——
当$k$为奇数时答案显然为0,否则从$V$中任选$k$个点,以任意一点为根,从底往上不难发现子图数量唯一
换言之,当$k$为偶数时,每一个合法(恰有$k$个奇度数的点)子图恰好对应于一种选择方案,即${|V|\choose k}$
当$G$是一张连通图时,继续来分析答案——
首先$k$仍要是偶数,且仍然考虑任选$k$点,并求出其一棵生成树
对于生成树以外的边,任意选每一条边是否加入子图,之后同样可以通过这棵生成树构造出一组方案,换言之每一组选点方案恰对应于$2^{|E|-|V|+1}$个子图,答案即${|V|\choose k}2^{|E|-|V|+1}$
有多个连通块时,显然每一个连通块独立,用$f_{i,j}$表示前$i$个连通块中选$j$个点,枚举最后一个所选的点转移即可,复杂度为$o(n^{2})$,可以通过
1 #include<bits/stdc++.h>
2 using namespace std;
3 #define N 5005
4 #define mod 998244353
5 int n,m,x,y,mi[N],fac[N],inv[N],f[N],szV[N],szE[N],dp[N][N];
6 int c(int n,int m){
7 return 1LL*fac[n]*inv[m]%mod*inv[n-m]%mod;
8 }
9 int find(int k){
10 if (k==f[k])return k;
11 return f[k]=find(f[k]);
12 }
13 void merge(int x,int y){
14 x=find(x),y=find(y);
15 if (x==y)szE[x]++;
16 else{
17 f[x]=y;
18 szV[y]+=szV[x];
19 szE[y]+=szE[x]+1;
20 }
21 }
22 int main(){
23 mi[0]=fac[0]=inv[0]=inv[1]=1;
24 for(int i=1;i<N;i++)mi[i]=2*mi[i-1]%mod;
25 for(int i=1;i<N;i++)fac[i]=1LL*fac[i-1]*i%mod;
26 for(int i=2;i<N;i++)inv[i]=1LL*(mod-mod/i)*inv[mod%i]%mod;
27 for(int i=1;i<N;i++)inv[i]=1LL*inv[i-1]*inv[i]%mod;
28 scanf("%d%d",&n,&m);
29 for(int i=1;i<=n;i++){
30 f[i]=i;
31 szV[i]=1,szE[i]=0;
32 }
33 for(int i=1;i<=m;i++){
34 scanf("%d%d",&x,&y);
35 merge(x,y);
36 }
37 dp[0][0]=1;
38 int scc=0;
39 for(int i=1;i<=n;i++)
40 if (f[i]==i){
41 scc++;
42 for(int j=0;j<=n;j++)
43 for(int k=0;k<=min(j,szV[i]);k+=2)
44 dp[scc][j]=(dp[scc][j]+1LL*mi[szE[i]-szV[i]+1]*c(szV[i],k)%mod*dp[scc-1][j-k])%mod;
45 }
46 for(int i=0;i<=n;i++)printf("%d\n",dp[scc][i]);
47 }
最新文章
- 关于IOS时间日历的一些注意事项 NSDateFormatter
- Codeforces 132E Bits of merry old England 【最小费用最大流】
- 用 Java 技术创建 RESTful Web 服务--转载
- JavaScript--模拟网络爬虫
- 在windows中搭建php开发环境
- const对象默认是static的,而不是extern的
- vue 自定义指令directive
- TCL 引用同目录下其他脚本文件--source
- win7下MKVToolNix进行mkv字幕封装
- weex Mac创建项目
- BZOJ3589 动态树(树链剖分+容斥原理)
- 使用Maven进行多模块拆分
- [Linux]Linux下Apache服务器配置
- Python基础(list和tuple)可变集合和‘不可变’集合
- 同一主机配置:vsftpd+pam+mysql
- [WorldWind学习]23.TerrainAccessor
- [19/04/19-星期五] Java的动态性_脚本(Script,脚本)引擎执行JavaScript代码
- 设置PNG图片DPI 信息,保存为PDF(使用Magick),与OpenCV转换
- SSD/Memory技术学习拼图
- Bitmap OutOfMemoryError
热门文章
- js Promise用法
- SpringBoot下使用AspectJ(CTW)下不能注入SpringIOC容器中的Bean
- MySQL灵魂拷问:36题带你面试通关!
- mysql order by语句流程是怎么样的
- Java泛型背后是什么?
- 【UE4 C++ 基础知识】<;3>; 基本数据类型、字符串处理及转换
- 在 ASP.NET Core Web API中使用 Polly 构建弹性容错的微服务
- 离线状态迁移Anaconda虚拟环境
- Beta阶段第六次会议
- [技术博客]OKhttp3使用get,post,delete,patch四种请求