题目背景

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

「冷」

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

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

他暗笑,笑自己多情。


「暖」

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

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

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


「坠」

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

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

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


「醒」

梦,惊醒。

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

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

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

的确,来了。

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


题目描述

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

纸条上有 \(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. go ants源码分析

    golang ants 源码分析 结构图 poolwithfunc与pool相差不大,这里我们只分析ants默认pool的流程 文件 作用 ants.go 定义常量.errors显示.默认建一个大小为 ...

  2. Nginx的常用配置

    Nginx配置文件结构 设置worker进程的用户,指的linux中的用户,会涉及到nginx操作目录或文件的一些权限,默认为 nobodyuser root; worker进程工作数设置,一般来说C ...

  3. Docker容器的数据卷

    一.数据卷概念 1.数据卷是宿主机中的一个目录或文件 2.当容器目录和数据卷目录绑定后,对方的修改会立即同步 3.一个数据卷可以被多个容器同时挂载 4.一个容器也可以挂载多个数据卷 简单理解:有点类似 ...

  4. Python技法:实用运维脚本编写(进程/文件/目录操作)

    Python在很大程度上可以对shell脚本进行替代.笔者一般单行命令用shell,复杂点的多行操作就直接用Python了.这篇文章就归纳一下Python的一些实用脚本操作. 1. 执行外部程序或命令 ...

  5. css实现元素淡入淡出

    @-webkit-keyframes fadeIn { 0% { opacity: 0; /*初始状态 透明度为0*/ } 50% { opacity: 0; /*中间状态 透明度为0*/ } 100 ...

  6. 一款高速的NET版的离线免费OCR

    PaddleOCR.Onnx 一款基于Paddle的OCR,项目使用ONNX模型,速度更快.本项目同时支持X64和X86的CPU上使用.本项目是一个基于PaddleOCR的C++代码修改并封装的.NE ...

  7. Go基础3:函数、结构体、方法、接口

    目录 1. 函数 1.1 函数返回值 同一种类型返回值 带变量名的返回值 函数中的参数传递 函数变量 1.2 匿名函数--没有函数名字的函数 在定义时调用匿名函数 将匿名函数赋值给变量 匿名函数用作回 ...

  8. 女朋友面试回来抱怨说会redis,面试官问了一堆redis

    Redis 优缺点及特点 什么是Redis?简述它的优缺点? Redis本质上是一个Key-Value类型的内存数据库,类似MemoryCache,整个数据库统统加载在内存当中进行操作,定期通过异步操 ...

  9. Python数据分析--Numpy常用函数介绍(2)

    摘要:本篇我们将以分析历史股价为例,介绍怎样从文件中载入数据,以及怎样使用NumPy的基本数学和统计分析函数.学习读写文件的方法,并尝试函数式编程和NumPy线性代数运算,来学习NumPy的常用函数. ...

  10. 【FineBI】FineBI连接阿里云mysql教程

    因为某些原因需要查看数据信息,之前连接成功一次,今天软件更新了以后发现连接信息丢. 又重新折腾了一下. 主要有2个地方: 1.查看阿里云数据库外网连接地址:打开云数据库RDS-实例列表-管理-数据库连 ...