题目背景

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

「冷」

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

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

他暗笑,笑自己多情。


「暖」

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

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

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


「坠」

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

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

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


「醒」

梦,惊醒。

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

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

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

的确,来了。

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


题目描述

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

纸条上有 \(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. MySQL常用数据类型及细节

    目录 1 整数类型 1.1 可选属性 1.1.1 M 1.1.2 UNSIGNED 1.1.3 ZEROFILL 2 浮点类型 2.1 精度误差 3 定点数类型 3.1 数据精度说明 3.2 类型介绍 ...

  2. 面试官给我挖坑:rm删除文件之后,空间就被释放了吗?

    在Linux,你是不是曾经天真的以为,使用rm删除一个文件,占用的空间就释放了?事情可能不是常常如人意. 产生一个指定大小的随机内容文件 我们先看一下当前各个挂载目录的空间大小: $ df -h /d ...

  3. 腾讯tbs 内存泄露

    一.背景 TBS(腾讯浏览服务)是腾讯提供的移动端webview体验的整套解决方案(https://x5.tencent.com/docs/index.html),可以用于移动端加载doc.xls.p ...

  4. 【Azure Redis 缓存】 Python连接Azure Redis, 使用redis.ConnectionPool 出现 "ConnectionResetError: [Errno 104] Connection reset by peer"

    问题描述 Python连接Azure Redis, 使用redis.ConnectionPool 出现 "ConnectionResetError: [Errno 104] Connecti ...

  5. PPP PPOE详解

    PPP协议是在串行线IP协议SLIP(Serial Line Internet Protocol)的基础上发展起来的.由于SLIP协议具有只支持异步传输方式.无协商过程(尤其不能协商如双方IP地址等网 ...

  6. 翻页组件page-flip调用问题

    翻页组件重新调用解决方案 翻页组件:page-flip import { PageFlip } from 'page-flip' pagefile() { //绘制翻页 this.pageFlip = ...

  7. jeecgboot-vue3笔记(九)——treeSelect树形选择组件的使用(异步加载)

    使用效果 初始化加载顶层节点,点击各层的>加载该节点的子节点,加载后>标识去除不再重复加载. 前端代码 vue ant-design组件 tree-data,树节点,children方式或 ...

  8. Linux版本的项目环境搭建

    项目环境docker及docker-compose文档 1.Linux环境介绍 centos7.6 16G以上内存空间(至少8G) 2.静态IP设置 1.找到配置文件 cd /etc/sysconfi ...

  9. NB-IoT无线通信模块与Lora无线通信协议技术分析与前景展望

    物联网的快速发展对无线通信技术提出了更高的要求,专为低带宽.低功耗.远距离.大量连接的物联网应用而设计的LPWAN(low-power Wide-Area Network,低功耗广域网)也快速兴起.物 ...

  10. 多路分支、for循环

    多路分支 多路分支也叫做switch语句,它的格式: switch (控制表达式){ case 条件: 输出....} switch 可以看成一种跳转,每当我们满足跳转就会跳转到响应的位置,接下我们写 ...