【THUWC2019模拟2019.1.18】Counting
Description
羽月最近发现,她发动能力的过程是这样的:
构建一个 V (V<=100)个点的有向图 G,初始为没有任何边,接下来羽月在脑中构建出一个长度为 E 的边的序列,序列中元素两两不同,然后羽月将这些边依次加入图中,每次加入之后计算当前图的强连通分量个数并记下来,最后得到一个长度为E 的序列,这个序列就是能力的效果。
注意到,可能存在边的序列不同而能力效果相同的情况,所以羽月想请你帮她计算能发动的不同能力个数,答案对 998244353 取模。你需要对于1<=E<=V*(V-1)的所有 E 计算答案。
Solution
- 一道题意使我懵逼的题目
- 既然我们要求的是强联通分量序列不同的个数,我们不妨设f[i]表示连了i条边的个数。然后我们枚举又合并了多少个强联通分量。
- 显然i条边是不足以表示这个状态的。
- 考虑与强联通分量有关的几个量:点数,链数…
- 注意到有一种可以构造最少强联通分量的贪心的连法,从一个强联通分量中分出一条链,然后再用一条边把这个链变成强联通分量。
- 一团强联通分量伸出一条链,没有别的边,这可以使我们用最少的边构造出最多种可能的连法(雾),从而使得计数不会缺漏。
- 根据以上的思路,设状态f[i][j][k]表示i条边,j+k个点在当前的联通块内,伸出一条长度为k的链,不同强连通分量序列的个数(也就是阶段性的答案)。
- 如果j+k<n,新的一条边要么从链连到一个不在联通块内的点f[i][j][k]->f[i+1][j][k+1]
,要么将l个链上的点合并带强联通分量中f[i][j][k]->f[i+1][j+l][k+l]. - 否则如果k>0我们还可以把这些点合并。
- 但要是k=0的话,我们就不能再贪心地连边了,接下来连的边就是对答案无关紧要的了。换句话说,就是不管连什么都不会改变强联通分量的个数。f[i][j][k]->f[i+1][j][k]
- 在转移过程中,应该保证边数在一个范围内。即i<=j*(j-1)+k*(k-1)/2+j*k。保证定义的状态的性质。
- 这题对于我来说还是十分有思维难度的。。。。。。
#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm>
#define maxn 105
#define ll long long
#define mo 998244353
using namespace std;int n,i,j,k,l,p,q;
ll f[2][maxn][maxn],ans;int main(){freopen("counting.in","r",stdin);freopen("counting.out","w",stdout);scanf("%d",&n);f[0][1][0]=1;for(i=0;i<(n-1)*n;i++){if (i==6){printf("");}p=i&1,q=p^1;memset(f[q],0,sizeof(f[q]));ans=0;for(j=0;j<=n;j++) for(k=0;k<=n-j;k++) if (f[p][j][k]){for(l=1;l<=k;l++) (f[q][j+l][k-l]+=f[p][j][k])%=mo;if (j+k<n) (f[q][j][k+1]+=f[p][j][k])%=mo;else if (i+1<=j*(j-1)+k*(k-1)/2+j*k)(f[q][j][k]+=f[p][j][k])%=mo;}for(j=0;j<=n;j++) for(k=0;k<=n-j;k++) (ans+=f[q][j][k])%=mo;printf("%lld ",ans);}
}
【THUWC2019模拟2019.1.18】Counting相关推荐
- 6009. 【THUWC2019模拟2019.1.18】Counting
题意: 羽月最近发现,她发动能力的过程是这样的: 构建一个 VVV 个点的有向图 GGG,初始为没有任何边,接下来羽月在脑中构建出一个长度为 EEE 的边的序列,序列中元素两两不同,然后羽月将这些边依 ...
- jzoj6009. 【THUWC2019模拟2019.1.18】Counting (dp)
Description 羽月最近发现,她发动能力的过程是这样的: 构建一个 V 个点的有向图 G,初始为没有任何边,接下来羽月在脑中构建出一个长度为 E 的边的序列,序列中元素两两不同,然后羽月将这些 ...
- jzoj6067-[NOI2019模拟2019.3.18]More?More!【dp】
正题 题目链接:https://gmoj.net/senior/#main/show/6067 题目大意 nnn个点的一张竞赛图,第iii个点向第jjj个点(i<j)(i<j)(i< ...
- jzoj6065-[NOI2019模拟2019.3.18]One?One!【FFT】
正题 题目链接:https://gmoj.net/senior/#main/show/6065 题目大意 oneness(x)oneness(x)oneness(x)表示xxx的约数中全是111的数的 ...
- 6360. 【NOIP2019模拟2019.9.18】最大菱形和(rhombus)
Description Input Output Sample Input 5 5 2 0 1 5 7 3 -4 2 0 -9 8 3 9 0 7 8 2 -4 5 -7 1 4 5 8 7 0 6 ...
- JZOJ6362. 【NOIP2019模拟2019.9.18】数星星(star)
Description Solution 考虑分治,将每一个询问挂在包括它的最大的区间中. 只考虑中点往右的区间的贡献,那么每一个点对于覆盖它的最早的时间有一个贡献. 我们建一个虚树,并且用并查集路径 ...
- Unity3d 周分享(17期 2019.5.18 )
选自过去1~2周 自己所看到外文内容:https://twitter.com/unity3d 和各种其他博客来源吧 1. [Unity]介绍可以在游戏画面上显示FPS,内存,音频,设备信息的" ...
- 18天精读掌握《费曼物理学讲义卷一》 第5天 2019/6/18
18天精读掌握<费曼物理学讲义卷一> 第5天 2019/6/18 1. 18日掌握<费曼物理学讲义>卷一计划概览 2. 今日学习成果 3. 今日时间表 4.Atimelogge ...
- 2019.12.18
2019.12.18 bool canBeEqual(vector<int>& target, vector<int>& arr) {if (target.si ...
最新文章
- 人工智能进军餐饮:AI调酒,越喝越有
- Selenium之定位浏览器弹窗方法汇总
- windowSoftInputMode属性详解
- 从C语言的角度重构数据结构系列(三)- 顺序存储结构和链式存储结构之顺序表
- Python之 sklearn:sklearn中的train_test_split函数的简介及使用方法之详细攻略
- java jtextfield 事件_JAVA JTextField事件处理
- 使用Cloudformation集成Spring Boot和EC2
- 刷爆了!李彦宏:这类程序员我给100万!你怎么看?
- cholesky分解java代码_Cholesky 分解(转)
- Android 进阶 教你打造 Android 中的 IOC 框架 【ViewInject】 (上)
- oracle全库导入 imp,imp导入全数据库
- html表格打印自动换行,html 表格自动换行问题
- 第三阶段应用层——1.5 数码相册—使用FreeType在LCD上显示单个字符
- LM317,线性稳压电源总结
- 怎么避免从删库到跑路
- html星空炫彩粒子,炫彩粒子模拟器游戏
- html网页打不开二级网页,教你二级网页打不开怎么解决
- 【HBase调优】Hbase万亿级存储性能优化总结
- You辉编程_JavaScript 编程
- 匹配任意字符(包括中英文及中英文标点)的正则表达式
热门文章
- python 读取3D obj文件
- 「聚变」前端 客户端 | 第十七届 D2 终端技术大会,开放报名!
- 2014小学计算机统计表,2014年春小学部考试成绩统计表.xls
- oracle数据库优化 -DBA常用Oracle数据库检查报告
- 软件配置项变更与基线变更
- 中国农场可变利率技术(VRT)行业市场供需与战略研究报告
- 【Python】unicode编码和bytes编码不能混用
- 云南省谷歌地球高程DEM等高线下载
- 【疫情是否会对2021届就业形势产生影响】听说连21届都要跟20届毕业生“抢饭碗”了?
- 利用Windows命令行解压zip压缩文件(不借助第三方软件)