题目背景

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

「冷」

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

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

他暗笑,笑自己多情。


「暖」

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

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

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


「坠」

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

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

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


「醒」

梦,惊醒。

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

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

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

的确,来了。

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


题目描述

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

纸条上有 \(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. 442. Find All Duplicates in an Array - LeetCode

    Question 442. Find All Duplicates in an Array Solution 题目大意:在数据中找重复两次的数 思路:数组排序,前一个与后一个相同的即为要找的数 Jav ...

  2. 每日一题20180330-Linux

    一.问题 1.1 统计/var/log/下所有文件个数 1.2 查找出/var/log目录下面修改时间是7天以前,大小在50k到2M之间,并以.log结尾的文件把这些文件复制到/data目录中 1.3 ...

  3. 一些GIT操作的技巧

    一.git stash 我们有时会遇到这样的情况,正在分支a上开发一半,然后分支b上发现Bug,需要马上处理.这时候分支a上的修改怎么办呢,git add 是不行的,有的git客户端版本会提示还有ad ...

  4. 2020级C++实验课-期末机考模拟考题解

    做这个题解的理由很简单,有很多同学想写但是不会写,凑巧我写了,所以搞个题解. 顺序就是题单里的顺序(界面左上角菜单切换文章,右上角目录方便查看) 1:黑马白马 题意: 随机得到一个数字,如果是偶数,则 ...

  5. 使用 Flutter 与 Firebase 制作 I/O 弹球游戏

    文/ Very Good Ventures 团队,5 月 11 日发表于 Flutter 官方博客 为了今年的 Google I/O 大会,Flutter 团队使用 Flutter 以及 Fireba ...

  6. 单例模式与pickle模块

    目录 设计模式之单例模式 pickle模块 设计模式之单例模式 设计模式是前辈们发明的经过反复验证用于解决固定问题的固定套路,在IT行业中设计模式总共有23种,可以分为三大类:创建型.结构型.行为型. ...

  7. 【Azure 存储服务】Java Azure Storage SDK V12使用Endpoint连接Blob Service遇见 The Azure Storage endpoint url is malformed

    问题描述 使用Azure Storage Account的共享访问签名(Share Access Signature) 生成的终结点,连接时遇见  The Azure Storage endpoint ...

  8. 10分钟学会 API 测试 !

    本文面向对象主要是后端开发人员   API 开发好之后,我们需要对 API 进行简单的调试,确保 API 可以跑通再提交给前端人员进行对接或者是测试人员对 API 进行测试:   在测试过程中我们关注 ...

  9. 物联网lora无线数传模块应用案例:LoRawan网关通信技术

    什么是LoRa LoRa(Long Range) 无线通信技术是 Semtech 在2012年开发出来的一款适合物联网使用的射频IC.其设计理念为低功耗.长距离.低成本.网路简单.易于扩展的无线数传技 ...

  10. 使用PowerShell下载文件

    更新记录 本文迁移自Panda666原博客,原发布时间:2021年7月12日. 使用Invoke-WebRequest指令下载文件 [Net.ServicePointManager]::Securit ...