不难看出,这是一道图论的题,只要要求在\(r\),的个数最小时,\(r\)的个数与文章长度。
预备知识
- STL之map (内置应该是hash之类的)
- tarjan缩点
- 树形dp
- 简单字符串
- 邻接表存边
问题分析
由于同义是单向的,我们建起了单向边,容易的是,如果一个单词可以最后回到他自己,那就把这个环上的点缩成一个scc,记下每个scc的最优\(r\)和最优\(leg\)(即\(length\)但我由于个人原因更喜欢用\(lgh\))
在对我们所得的每一个强连通,进行重构图。最后跑一个\(dp\)即可(可以用深搜实现)
统计答案时,对每一个word独立操作即可
如果你还是不太清楚,我们再来看图(样例一)
我们先建一个对应关系
然后,我们间的图即为
然后,我们先进行缩点,然后统计出每个强连通的最优值,最后跑一遍树形dp就可以了
其实只要看清楚这个题的意思,就很好AC了
时间复杂度分析
- tarjan O(n+m)
- 统计最优值 O(n)
- 树形dp O(n)
好的没有毒瘤\(n^2\) ,此题可过
附上代码
#include
#include
#include
#include
#include
#include
感想 ,这道题拖了很久没做,还是内心的惧怕呀