题目背景

题目背景与题目描述无关。签到愉快。

「冷」

他半靠在床沿,一缕感伤在透亮的眼眸间荡漾。

冷见惆怅而四散逃去。经历嘈杂喧嚣,感官早已麻木。冷又见空洞而乘隙而入。从里向外,这不是感官的范畴。

他暗笑,笑自己多情。


「暖」

正恍惚,忽见她闪进门帘。

慢步,靠近,站定,俯身。一抹浅笑挟带着闪闪泪光刻印在时光里。

沉醉于这美好,四周空气开始有了温度,刚刚好的温度。


「坠」

起身,伸出手,他想轻抚过那朝思暮想的面颊。

但他做不到,他发现他在坠落,没有尽头。

深渊是主犯,不断向下延伸,贪婪地吞噬这尘世间最后一点温柔。迷雾是帮凶,裹住了一切,阻断最后一条希望的路。


「醒」

梦,惊醒。

他抬起头,时间停滞。他想到那深渊的血盆大口,又忆起梦中溜过的那丝美好。

他猛地抓起外衣,冲出自习室。

小花园的路灯,藏着栀子花的剪影。她也在那里,像在等待一个注定会来的人。

的确,来了。

命运接受了这一对相伴而行的身影和那个通往“永远”的约定。


题目描述

在等待那个注定会来的人时,可爱的她比较闲,伴着夜色写下了一张纸条。

纸条上有 \(n\) 段只包含小写字母的字符串和一个长度为 \(26\) 的整数序列 \(V\)。

月光不断推移,她看着迟来的中意之人,悄声道:“你可以任意使用操作 \((i, p)\) 以删除所有满足条件的字符串。所谓条件有两个。第一,长度至少为 \(p\)。”

“第二,只有长度大于等于 \(p\) 且前 \(p\) 位和第 \(i\) 个字符串的前 \(p\) 位完全相同的字符串(包含第 \(i\) 个)才算满足条件。”

“每一次操作 \((i, p)\) 的代价是 \(V_c\),\(V_c\) 中的下标 \(c\) 表示第 \(i\) 个字符串的第 \(p\) 位的字符在 az 的小写字母中的排名哦,例如:a1b2。”

“但愿,你可以告诉我删除所有字符串的最小代价叭?”


输入格式

共 \(n + 2\) 行。

第 \(1\) 行,一个正整数 \(n\)。

接下来有 \(n\) 行,每一行包含一个仅由小写字符组成的字符串。

最后一行,包含 \(26\) 个正整数,表示序列 \(V\)。


输出格式

共一行,一个正整数,表示删除所有字符串的最小代价。


样例输入

3
bcde
bcdefg
arena
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26

样例输出

3

提示

记输入字符串总长为 \(|S|\)。

对于 \(20 \%\) 的数据,\(1 \leq n \leq 4, n \leq |S| \leq 20,1 \leq V_i \leq 10\)。

对于另外 \(10 \%\) 的数据,\(V_i = 1\)。

对于另外 \(20 \%\) 的数据,\(1 \leq n \leq 10^4, n \leq |S| \leq 5 \times 10^4, 1 \leq V_i \leq 10^9\)。

对于 \(100 \%\) 的数据,\(1 \leq n \leq 10^5, n \leq |S| \leq 3 \times 10^5, 1 \leq V_i \leq 10^9\)。

保证数据随机。


注意: 一个字符串可能会因为多次操作而被重复删除,这种情况就当作只删除了一次,后续的删除操作实际无效,但代价照常。

比如:

ab
cb

可以执行操作 \((1, a)\) 和操作 \((2, b)\),即使 ab 被删除了两次。


下面是题解


写在前面

题目初版太难了(?,以至于赶来救急的验题人不会。

紧接着,验题人反手一个逻辑分析,Hack 掉了出题人的 std。

然后出题人将错就错,胡出了这道题。签到愉快((


题解

从「条件」入手就非常好做。

两个条件一起限制了字符串的前缀和前缀结尾字符,这明确指向 Trie 树之类的。那么再来考虑操作能不能挂在 Trie 树上。

确实可以,操作 \((i, p)\) 就是在 Trie 树上删掉 \(p\) 这一深度上代表第 \(i\) 个字符串的第 \(p\) 位的字符的边。如果把这个字符的在小写字母里的排名记为 \(c\),则操作代价为 \(V_c\)。所以这是一颗带额外边权的 Trie 树。

而你的任务变成:删掉任意多条边,使得根节点与所有叶子节点都不连通,并满足删掉的边权和最小。

然后就可以树形 dp 了,当然你甚至可以最小割(因为考虑到一些因素,我们保留了最小割方法的通过性)。最小割是裸的,简单提一下树形 dp。

定义 \(dp_u\) 表示通过考虑节点 \(u\) 和它父亲的这条边(根节点没有)和节点 \(u\) 的子树内的边割一部分,使得整个节点 \(u\) 的子树内的叶子节点与根断开的最小代价。

转移分两种:

  • 枚举每一个儿子(注意叶子节点没有儿子,此时舍弃这类情况),它们单独控制自己的子树就可以了,代价即 \({\sum \limits _{u \to v}}dp_v\)。
  • 割 \(u\) 节点和它父亲的边,代价即边权。

两者取最小值向上转移即可,时间复杂度 \(O(n)\),空间复杂度 \(O(n)\)。根据实现不同可以会有 \(26\) 的常数。

总之就真的是签到啦。


写在后面

可以考虑一下,如果操作 \((i, p)\) 改成:记第 \(i\) 个字符串的第 \(p\) 个字符为 \(c\),排名为 \(r\)。每次操作删除所有有第 \(p\) 位,且第 \(p\) 位为 \(c\) 的字符串,代价为 \(V_r\)。

其它不变(或许数据范围可以作微调),该怎么做呢?

Solution -「原创」Destiny的更多相关文章

  1. Solution -「构造」专练

    记录全思路过程和正解分析.全思路过程很 navie,不过很下饭不是嘛.会持续更新的(应该). 「CF1521E」Nastia and a Beautiful Matrix Thought. 要把所有数 ...

  2. Solution -「GLR-R2」教材运送

    \(\mathcal{Description}\)   Link.   给定一棵包含 \(n\) 个点,有点权和边权的树.设当前位置 \(s\)(初始时 \(s=1\)),每次在 \(n\) 个结点内 ...

  3. Solution -「WF2011」「BZOJ #3963」MachineWorks

    \(\mathcal{Description}\)   Link.   给定你初始拥有的钱数 \(C\) 以及 \(N\) 台机器的属性,第 \(i\) 台有属性 \((d_i,p_i,r_i,g_i ...

  4. Solution -「LOCAL」二进制的世界

    \(\mathcal{Description}\)   OurOJ.   给定序列 \(\{a_n\}\) 和一个二元运算 \(\operatorname{op}\in\{\operatorname{ ...

  5. Solution -「SHOI2016」「洛谷 P4336」黑暗前的幻想乡

    \(\mathcal{Description}\)   link.   有一个 \(n\) 个结点的无向图,给定 \(n-1\) 组边集,求从每组边集选出恰一条边最终构成树的方案树.对 \(10^9+ ...

  6. Solution -「LOCAL」大括号树

    \(\mathcal{Description}\)   OurTeam & OurOJ.   给定一棵 \(n\) 个顶点的树,每个顶点标有字符 ( 或 ).将从 \(u\) 到 \(v\) ...

  7. Solution -「ZJOI2012」「洛谷 P2597」灾难

    \(\mathcal{Description}\)   link.   给定一个捕食网络,对于每个物种,求其灭绝后有多少消费者失去所有食物来源.(一些名词与生物学的定义相同 w.)   原图结点数 \ ...

  8. Solution -「JSOI2008」「洛谷 P4208」最小生成树计数

    \(\mathcal{Description}\)   link.   给定带权简单无向图,求其最小生成树个数.   顶点数 \(n\le10^2\),边数 \(m\le10^3\),相同边权的边数不 ...

  9. Solution -「LOCAL」过河

    \(\mathcal{Description}\)   一段坐标轴 \([0,L]\),从 \(0\) 出发,每次可以 \(+a\) 或 \(-b\),但不能越出 \([0,L]\).求可达的整点数. ...

随机推荐

  1. 团队Beta5

    队名:观光队 链接 组长博客 作业博客 组员实践情况 王耀鑫 **过去两天完成了哪些任务 ** 文字/口头描述 学习 展示GitHub当日代码/文档签入记录 无 接下来的计划 无 **还剩下哪些任务 ...

  2. 记一次调试YOLOv5+DeepSort车辆跟踪项目的经过

    摘要:学习别人的开源项目是日常的一项必备技能,本文通过一个车辆跟踪(YOLOv5+DeepSort)的例子介绍如何配置和调试GitHub上的开源代码.以第一人称的视角给出本人调试代码的过程,包括项目r ...

  3. 升级gradle后。需要修改jenkin 编译java版本从1.8 到11

    错误提示 * What went wrong: A problem occurred evaluating project ':App'. > Failed to apply plugin 'c ...

  4. ansible的roles使用

    1.创建roles文件夹 mkdir roles 2.在roles文件夹里面创建文件夹 cd roles/ mkdir {nginx,uwsgi,redis,mysql} 3.cd nginx 4.m ...

  5. 镜头随人物而动,视频编辑服务让用户稳站C位

    现如今,视频是用户记录生活最热门的方式,各种App在发布视频界面都提供了视频简单剪辑的功能.除了增加音乐.滤镜.贴纸这些基础功能以外,用户越来越追求镜头感,这往往需要通过专业的视频剪辑软件手动打上关键 ...

  6. 149_1秒获取Power BI Pro帐号

    一.背景 当你来到这篇文章的时候,我想你已经在网上搜索了一圈了.网上有一大把教你如何注册Power BI帐号的方法,我们这里就不在赘述了.因为各种因素的限制确实比较麻烦.我们直接提供Power BI ...

  7. Vue 基础篇---computed 和 watch

    最近在看前端 Vue方面的基础知识,虽然前段时间也做了一些vue方面的小项目,但总觉得对vue掌握的不够 所以对vue基础知识需要注意的地方重新撸一遍,可能比较零碎,看到那块就写哪块吧 1.vue中的 ...

  8. BERT的优化演进方法汇总(持续更新)

    模型结构演进 本文以演进方向和目的为线索梳理了一些我常见到但不是很熟悉的预训练语言模型,首先来看看"完全版的BERT":RoBERTa: A Robustly Optimized ...

  9. 使用C#和MonoGame开发俄罗斯方块游戏

    小的时候就看到有同学使用C语言在DOS下做过一款俄罗斯方块的游戏,当时是启用了DOS的图形化模式,感觉也挺有意思.最近上海疫情封控在家,周末也稍微有点空余时间,于是使用Visual Studio 20 ...

  10. 论文解读(GraphSMOTE)《GraphSMOTE: Imbalanced Node Classification on Graphs with Graph Neural Networks》

    论文信息 论文标题:GraphSMOTE: Imbalanced Node Classification on Graphs with Graph Neural Networks论文作者:Tianxi ...