[Scoi2016]背单词(trie+贪心)
题意:重新解释一下题意吧(题意晦涩难懂)
给定n个单词,你可以按照顺序学习,当学习这一单词时,这个单词是第x个要学习的单词,需要的代价分三类:
1、若存在其他单词是其后缀没被学习,则代价为n2
2、若不存在其他单词是其后缀,则代价是x
3、否则代价是x-y(y是最靠后的是其后缀的单词学习的位置)
题解:
首先第一种情况要是存在显然不是最优的,然后很容易联想到建立字符串的反串。为了使答案尽可能小,一定存在一种方案为树上的dfs序,容易证明这样一定比不是dfs序更优。然后取出关键点,按照子树大小从小到大排列一下就完了,为什么从小到大排序,因为排队接水问题大家应该是知道的。
#include<bits/stdc++.h>
using namespace std;
const int N=5e5+;
int n,tot,ch[N][],val[N],sz[N],dfn[N];
long long ans;
char str[N];
vector<int>G[N];
void build()
{
int len=strlen(str),u=,c;
for(int i=len-;~i;i--)
{
c=str[i]-'a';
if(!ch[u][c])ch[u][c]=++tot;
u=ch[u][c];
}
val[u]=;
}
void dfs1(int u,int fa)
{
if(val[u])G[fa].push_back(u);
for(int i=;i<;i++)if(ch[u][i])dfs1(ch[u][i],val[u]?u:fa);
}
bool cmp(int a,int b){return sz[a]<sz[b];}
void dfs2(int u,int fa)
{
dfn[u]=++tot;
if(u!=)ans+=dfn[u]-dfn[fa];
sort(G[u].begin(),G[u].end(),cmp);
for(int i=;i<G[u].size();i++)dfs2(G[u][i],u);
}
int main()
{
scanf("%d",&n),tot=;
for(int i=;i<=n;i++)scanf("%s",str),build();
dfs1(,);
for(int i=tot;i;i--)
if(val[i])
{
sz[i]=;
for(int j=;j<G[i].size();j++)sz[i]+=sz[G[i][j]];
}
tot=;
dfs2(,);
printf("%lld",ans);
}
[Scoi2016]背单词(trie+贪心)的更多相关文章
- [BZOJ4567][SCOI2016]背单词(Trie+贪心)
1.题意表述十分难以理解,简单说就是:有n个单词,确定一个背的顺序,使总代价最小. 2.因为第(1)种情况的代价是n*n,这个代价比任何一种不出现第(1)种情况的方案都要大,所以最后肯定不会出现“背某 ...
- [bzoj4567][Scoi2016]背单词-Trie+贪心+模型转化
Brief Description 给你N个互不相同的字符串,记\(S_i\)为第i个字符串,现在要求你指定N个串的出现顺序,我们用\(V_i\)表示第i个字符串是第几个出现的,则V为1到N的一个排列 ...
- 【BZOJ4567】[Scoi2016]背单词 Trie树+贪心
[BZOJ4567][Scoi2016]背单词 Description Lweb 面对如山的英语单词,陷入了深深的沉思,“我怎么样才能快点学完,然后去玩三国杀呢?”.这时候睿智 的凤老师从远处飘来,他 ...
- [SCOI2016]背单词——trie树相关
题目描述 Lweb 面对如山的英语单词,陷入了深深的沉思,”我怎么样才能快点学完,然后去玩三国杀呢?“.这时候睿智的凤老师从远处飘来,他送给了 Lweb 一本计划册和一大缸泡椒,他的计划册是长这样的: ...
- [SCOI2016] 背单词 (Trie 树,贪心)
题目链接 大致题意 给你 \(n\) 个字符串, 要求你给出最小的代价. 对于每个字符串: 1.如果它的后缀在它之后,那么代价为 \(n^2\). 2.如果一个字符串没有后缀,那么代价为 \(x\), ...
- BZOJ 4567 [SCOI2016]背单词 (Trie树、贪心)
题目链接: https://www.lydsy.com/JudgeOnline/problem.php?id=4567 题解: 显然答案一定小于\(n\times n\), 字符串倒过来变成前缀建Tr ...
- [luogu] P3294 [SCOI2016]背单词 (贪心)
题目描述 Lweb 面对如山的英语单词,陷入了深深的沉思,"我怎么样才能快点学完,然后去玩三国杀呢?".这时候睿智的凤老师从远处飘来,他送给了 Lweb 一本计划册和一大缸泡椒,他 ...
- P3294 [SCOI2016]背单词
P3294 [SCOI2016]背单词 Trie+贪心 倒插进树+取出重建+子树处理+贪心遍历 倒插进树:把后缀转化为前缀,所以把字符串倒着插进Trie中 取出重建:重新建立一棵以单词为节点的树,如果 ...
- 4567: [Scoi2016]背单词
4567: [Scoi2016]背单词 https://www.lydsy.com/JudgeOnline/problem.php?id=4567 题意: 题意看了好久,最后在其他人的博客里看懂了的. ...
- 【bzoj4567】[Scoi2016]背单词
4567: [Scoi2016]背单词 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 1123 Solved: 476[Submit][Status][ ...
随机推荐
- V-Distpicker不能完整显示内容
V-Distpicker插件在列表中,或者在dialog中只显示了第一次的内容,第二次就开始报错.这个和前篇中的地图问题其实如出一辙. 解决办法,重加载,局部刷新. <el-form-item ...
- jQuery实现点击div外的区域,来隐藏指定节点
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <script sr ...
- java登录以及连接数据库的温习
学完一部分android相关知识点后,为了下周的java测试,我还是反回来重新的学习了上学期的知识点java,在今天打开eclipse之后,对于自己之前自己所写过的东西还有连接数据库的内容,已经有所忘 ...
- 7.CSRF攻击和文件上传漏洞攻击
一.CSRF攻击及防范措施 1.概念 请求来源于其他网站,请求并不是用户的意愿,而是伪造的请求,诱导用户发起的请求 2.场景 攻击者盗用了你的身份,以你的名义发送恶意请求.CSRF能够做的事情包括:以 ...
- SAP_SD常用事务代码
1.创建/修改/显示销售订单:VA01/VA02/VA03 2.根据销售订单创建交货单:VL01N 3.修改/显示交货单:VL02N/VL03N 4.交货单发货过账:VL02N 5.发货过账冲销:VL ...
- Postgres psql: 致命错误: 角色 "postgres" 不存在
问题再现 当前环境: postgresql: 11.5 windows 10 企业版LTSC 64位 当运行"C:\Program Files\PostgreSQL\11\scripts\r ...
- 深入浅出Python装饰器
1.前言 装饰器是Python的特有的语法,刚接触装饰器的同学可能会觉得装饰器很难理解,装饰器的功能也可以不用装饰器实现,但是装饰器无疑是提高你Python代码质量的利器(尤其是使用在一些具有重复功能 ...
- MySQL 插入 中文数据乱码解决
问题描述: 1.在命令行中进行插入,没有问题.但是显示存在部分乱码 2.在JDBC中插入成功.中文是直接以“??”形式显示. 通过Navicat客户端查看 与在网页中看到的一一致,说明读取没有问题,问 ...
- .NET CORE 配置Swagger文档
1.先通过NuGet安装Swashbuckle.AspNetCore ,支持.NET core,版本是4.0.1,以上版本好像有些功能不支持 2.startup文件里注入swagger,Configu ...
- dac oracle
unit Unit1; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System ...