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相关推荐

  1. 6009. 【THUWC2019模拟2019.1.18】Counting

    题意: 羽月最近发现,她发动能力的过程是这样的: 构建一个 VVV 个点的有向图 GGG,初始为没有任何边,接下来羽月在脑中构建出一个长度为 EEE 的边的序列,序列中元素两两不同,然后羽月将这些边依 ...

  2. jzoj6009. 【THUWC2019模拟2019.1.18】Counting (dp)

    Description 羽月最近发现,她发动能力的过程是这样的: 构建一个 V 个点的有向图 G,初始为没有任何边,接下来羽月在脑中构建出一个长度为 E 的边的序列,序列中元素两两不同,然后羽月将这些 ...

  3. jzoj6067-[NOI2019模拟2019.3.18]More?More!【dp】

    正题 题目链接:https://gmoj.net/senior/#main/show/6067 题目大意 nnn个点的一张竞赛图,第iii个点向第jjj个点(i<j)(i<j)(i< ...

  4. jzoj6065-[NOI2019模拟2019.3.18]One?One!【FFT】

    正题 题目链接:https://gmoj.net/senior/#main/show/6065 题目大意 oneness(x)oneness(x)oneness(x)表示xxx的约数中全是111的数的 ...

  5. 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 ...

  6. JZOJ6362. 【NOIP2019模拟2019.9.18】数星星(star)

    Description Solution 考虑分治,将每一个询问挂在包括它的最大的区间中. 只考虑中点往右的区间的贡献,那么每一个点对于覆盖它的最早的时间有一个贡献. 我们建一个虚树,并且用并查集路径 ...

  7. Unity3d 周分享(17期 2019.5.18 )

    选自过去1~2周 自己所看到外文内容:https://twitter.com/unity3d 和各种其他博客来源吧 1. [Unity]介绍可以在游戏画面上显示FPS,内存,音频,设备信息的" ...

  8. 18天精读掌握《费曼物理学讲义卷一》 第5天 2019/6/18

    18天精读掌握<费曼物理学讲义卷一> 第5天 2019/6/18 1. 18日掌握<费曼物理学讲义>卷一计划概览 2. 今日学习成果 3. 今日时间表 4.Atimelogge ...

  9. 2019.12.18

    2019.12.18 bool canBeEqual(vector<int>& target, vector<int>& arr) {if (target.si ...

最新文章

  1. 人工智能进军餐饮:AI调酒,越喝越有
  2. Selenium之定位浏览器弹窗方法汇总
  3. windowSoftInputMode属性详解
  4. 从C语言的角度重构数据结构系列(三)- 顺序存储结构和链式存储结构之顺序表
  5. Python之 sklearn:sklearn中的train_test_split函数的简介及使用方法之详细攻略
  6. java jtextfield 事件_JAVA JTextField事件处理
  7. 使用Cloudformation集成Spring Boot和EC2
  8. 刷爆了!李彦宏:这类程序员我给100万!你怎么看?
  9. cholesky分解java代码_Cholesky 分解(转)
  10. Android 进阶 教你打造 Android 中的 IOC 框架 【ViewInject】 (上)
  11. oracle全库导入 imp,imp导入全数据库
  12. html表格打印自动换行,html 表格自动换行问题
  13. 第三阶段应用层——1.5 数码相册—使用FreeType在LCD上显示单个字符
  14. LM317,线性稳压电源总结
  15. 怎么避免从删库到跑路
  16. html星空炫彩粒子,炫彩粒子模拟器游戏
  17. html网页打不开二级网页,教你二级网页打不开怎么解决
  18. 【HBase调优】Hbase万亿级存储性能优化总结
  19. You辉编程_JavaScript 编程
  20. 匹配任意字符(包括中英文及中英文标点)的正则表达式

热门文章

  1. python 读取3D obj文件
  2. 「聚变」前端 客户端 | 第十七届 D2 终端技术大会,开放报名!
  3. 2014小学计算机统计表,2014年春小学部考试成绩统计表.xls
  4. oracle数据库优化 -DBA常用Oracle数据库检查报告
  5. 软件配置项变更与基线变更
  6. 中国农场可变利率技术(VRT)行业市场供需与战略研究报告
  7. 【Python】unicode编码和bytes编码不能混用
  8. 云南省谷歌地球高程DEM等高线下载
  9. 【疫情是否会对2021届就业形势产生影响】听说连21届都要跟20届毕业生“抢饭碗”了?
  10. 利用Windows命令行解压zip压缩文件(不借助第三方软件)