题意:

羽月最近发现,她发动能力的过程是这样的:
构建一个 VVV 个点的有向图 GGG,初始为没有任何边,接下来羽月在脑中构建出一个长度为 EEE 的边的序列,序列中元素两两不同,然后羽月将这些边依次加入图中,每次加入之后计算当前图的强连通分量个数并记下来,最后得到一个长度为EEE 的序列,这个序列就是能力的效果。
注意到,可能存在边的序列不同而能力效果相同的情况,所以羽月想请你帮她计算能发动的不同能力个数,答案对 998244353998244353998244353 取模。你需要对于1≤E≤V∗(V−1)1\leq E \leq V*(V-1)1≤E≤V∗(V−1)的所有 EEE 计算答案。

数据范围:

对于 101010%的数据,1≤V≤51 \leq V \leq 51≤V≤5
对于 303030%的数据,1≤V≤201 \leq V \leq 201≤V≤20
对于 606060%的数据,1≤V≤501 \leq V \leq 501≤V≤50
对于 100100100%的数据,1≤V≤1001 \leq V \leq 1001≤V≤100

Analysis:

我们发现有用的仅仅是那个每一步的强连通分量序列。
一开始有nnn个强连通分量,我们考虑用简单的情况构造。
从111伸出去到iii一条链,然后剩余是单独的点也是强连通分量,在那条链上不断缩强连通分量,这样我们可以涵盖所有强连通分量变化的情况。
考虑每一步怎么变,要不是新加一个点到链上,或者往前连一条没用的边(保持连通分量不变),要不就是一个点往前连一条环边然后和前面的点缩到一起。注意连没用的边一定是在把所有的点加到链上之后,因为他们产生的效果相同,这里在转移的时候要特判。
那么我们考虑设fi,j,kf_{i,j,k}fi,j,k​表示当前用了iii条边,在链上前面的连通分量里的点是111~jjj,链上一共有kkk个点。
那么转移就如上即可,注意判掉不合法情况,就是连没用边和环边时,边可能会超出能连数目。我们考虑链上有nnn个点,有iii个点在环内。那么nnn个点可以往后连,iii个点可以往前连,那么一共可以连n∗(n−1)+i∗(i−1)2\frac{n*(n-1)+i*(i-1)}{2}2n∗(n−1)+i∗(i−1)​条边。
我们发现涉及到的状态一共也只有V4V^4V4个,因此暴力转移即可。
复杂度O(V4)O(V^4)O(V4)

Code:

# include<cstdio>
# include<cstring>
# include<algorithm>
using namespace std;
const int N = 1e2 + 5;
const int mo = 998244353;
int f[N * (N - 1)][N][N];
int n;
inline int inc(int x,int y)
{ return x + y >= mo ? x + y - mo : x + y; }
inline int dec(int x,int y)
{ return x - y < 0 ? x - y + mo : x - y; }
int main()
{freopen("counting.in","r",stdin);freopen("counting.out","w",stdout);scanf("%d",&n);f[0][1][1] = 1;for (int i = 0 ; i < n * (n - 1) ; ++i)for (int j = 1 ; j <= min(n,i + 1) ; ++j)for (int k = j ; k <= min(n,i + 1) ; ++k)if (f[i][j][k]){if (i <= k + j - 2 && k < n) f[i + 1][j][k + 1] = inc(f[i + 1][j][k + 1],f[i][j][k]);else if ((k * (k - 1) + j * (j - 1)) / 2 >= i + 1) f[i + 1][j][k] = inc(f[i + 1][j][k],f[i][j][k]);for (int l = 1 ; l <= k - j ; ++l)if ((k * (k - 1) + (j + l) * (j + l - 1)) / 2 >= i + 1) f[i + 1][j + l][k] = inc(f[i + 1][j + l][k],f[i][j][k]);}for (int i = 1 ; i <= n * (n - 1) ; ++i){int ans = 0;for (int j = 1 ; j <= min(n,i + 1) ; ++j)for (int k = j ; k <= min(n,i + 1) ; ++k) ans = inc(ans,f[i][j][k]);printf("%d ",ans);}return 0;
}

6009. 【THUWC2019模拟2019.1.18】Counting相关推荐

  1. 【THUWC2019模拟2019.1.18】Counting

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

  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. 【数据结构】顺序表的应用(3)(C语言)
  2. 如何攻击Java Web应用【转载】
  3. 1.信号处理之:kill(),alarm(),pause()函数
  4. rails采用MongoDB感觉相当不错!
  5. winform闪屏问题解决方案
  6. vue:无法将“vue”识别为脚本_「前端架构」React和Vue -CTO的选择正确框架的指南...
  7. 设计灵感素材网站:美工设计者必备
  8. 第一章python绝对温标身体质量指数bmi
  9. 解决 找不到方法:“Void System.Web.UI.HtmlControls.HtmlForm.set_Action(System.String)”。
  10. cruise软件模型,混动仿真模型,IMMD架构混联混动仿真模型
  11. Linux C/C++之TCP / UDP通信
  12. EtherCAT运动控制卡开发教程之Qt(下):SCARA机械手正反解的建立
  13. Direct Rendering RenderMan Point Cloud
  14. 考研英语词汇(部分)快速记忆
  15. 哈尔滨工业大学考研试题泄密了?官方通报:不存在
  16. ROS:rosbag play系列指令(详解)
  17. Redis进阶:布隆过滤器(Bloom Filter)及误判率数学推导
  18. 品牌与商家如何做电商直播运营的呢?
  19. 运营商大数据是什么,是如何实现精准获客的
  20. 精选(36) 常见的五种MySQL高可用方案分析

热门文章

  1. 吸引诸多名人及宫崎骏关注的Meta Rim有何魔力?
  2. 隐私计算加密技术基础系列(下)对称与非对称加密的应用场景
  3. 电子听诊器智能化后对健康生活有多大的帮助?
  4. 大话设计模式读书笔记之单例模式
  5. Transformer 详解(上) — 编码器【附pytorch代码实现】
  6. html+css 毛玻璃效果
  7. AI/大数据测试——各大厂质量保障实践分享汇总
  8. python学习之文字转换为语音读出来
  9. Java里面是先算乘除后算加减_java.怎么实现字串符的先乘除后加减阿
  10. 无线城域网 WiMax 仿真实验