ref

#include <algorithm>
#include <iostream>
#include <cstring>
#include <cstdio>
#include <vector>
using namespace std;
int n, tot, dfn[100005], s[100005][26], dep[100005], idx, siz[100005], ans;
bool iss[100005];
char ss[100005];
vector<int> vec[100005];
void insert(){
int u=0;
int len=strlen(ss);
for(int i=0; i<len; i++){
int t=ss[i]-'a';
if(!s[u][t]) s[u][t] = ++tot;
u = s[u][t];
}
iss[u] = true;
}
void dfs(int x, int d){
dep[x] = d;
dfn[x] = ++idx;
siz[x] = 1;
for(int i=0; i<26; i++)
if(s[x][i]){
dfs(s[x][i], d+1);
siz[x] += siz[s[x][i]];
}
}
void faq(int x){
for(int i=0; i<26; i++)
if(s[x][i]){
faq(s[x][i]);
if(vec[x].size()<vec[s[x][i]].size()) swap(vec[x], vec[s[x][i]]);
for(int j=0; j<vec[s[x][i]].size(); j++){
vec[x].push_back(vec[s[x][i]][j]);
push_heap(vec[x].begin(), vec[x].end());
}
vec[s[x][i]].clear();
}
if(!iss[x] && x && vec[x].size()){
pop_heap(vec[x].begin(), vec[x].end());
vec[x].pop_back();
vec[x].push_back(dep[x]);
push_heap(vec[x].begin(), vec[x].end());
}
if(iss[x]){
vec[x].push_back(dep[x]);
push_heap(vec[x].begin(), vec[x].end());
}
}
int main(){
cin>>n;
for(int i=1; i<=n; i++){
scanf("%s", ss);
insert();
}
dfs(0, 0);
faq(0);
for(int i=0; i<vec[0].size(); i++)
ans += vec[0][i];
cout<<ans<<endl;
return 0;
}

cf965e Short Code的更多相关文章

  1. Codeforces 965E Short Code 启发式合并 (看题解)

    Short Code 我的想法是建出字典树, 然后让后面节点最多的点优先向上移到不能移为止, 然后gg. 正确做法是对于当前的节点如果没有被占, 那么从它的子树中选出一个深度最大的点换到当前位置. 用 ...

  2. CodeForces - 965E Short Code

    Discription Arkady's code contains nn variables. Each variable has a unique name consisting of lower ...

  3. Codeforces965E Short Code 【启发式合并】【堆】

    题目大意: 给出总长度不超过1E+5的不重复字符串集,给每个字符串选一个前缀使得可以区分它. 题目分析: KAN出的DIV2难度一般不高,想升Ranting的可以试试. 简单的树上启发式合并,建出Tr ...

  4. 【Codeforces Round #476 (Div. 2) [Thanks, Telegram!] E】Short Code

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 先建立一棵字典树. 显然,某一些节点上会被打上标记. 问题就转化成求所有标记的深度的和的最小值了. (标记可以上移,但是不能在同一位 ...

  5. Oracle Applications Multiple Organizations Access Control for Custom Code

    档 ID 420787.1 White Paper Oracle Applications Multiple Organizations Access Control for Custom Code ...

  6. (转)linux下和云端通讯的例程, ubuntu和openwrt实验成功(一)

    一.  HTTP请求的数据流总结#上传数据, yeelink的数据流如下POST /v1.0/device/4420/sensor/9089/datapoints HTTP/1.1Host: api. ...

  7. 嵌入式Linux驱动学习之路(二十六)DM9000C网卡驱动程序

    基于DM9000C的原厂代码修改dm9000c的驱动程序. 首先确认内存的基地址 iobase. 确定中断号码. 打开模块的初始化函数定义. 配置内存控制器的相应时序(结合DM9000C.C的手册). ...

  8. Xcode 升级后,常常遇到的遇到的警告、错误,解决方法(转)

    从sdk3.2.5升级到sdk 7.1中间废弃了很多的方法,还有一些逻辑关系更加严谨了.1,警告:“xoxoxoxo”  is deprecated解决办法:查看xoxoxoxo的这个方法的文档,替换 ...

  9. spring源码分析之spring-core总结篇

    1.spring-core概览 spring-core是spring框架的基石,它为spring框架提供了基础的支持. spring-core从源码上看,分为6个package,分别是asm,cgli ...

随机推荐

  1. Android(java)学习笔记102:Dalivk虚拟机的初始化过程

    1. 初始化下面系统函数(调用dvmStartup函数初始化所有相关的函数) 开始学习虚拟机的初始化过程,先从dvmStartup函数开始,这个函数实现所有开始虚拟机的准备工作:    dvmAllo ...

  2. 【BZOJ1925】 [SDOI2010] 地精部落(带有一堆性质的动态规划)

    点此看题面 大致题意: 问你有多少长度为\(n\)的数列,它当中每个数字要么比旁边两个数字都小,要么比旁边两个数字都大. 性质 这题应该比较显然是一道动态规划题,但刚看到这题时我却无从下手. 其实,了 ...

  3. 关于mongodb的日志

    mongodb的日志与profile相似,在启动mongod时 可以用verbose这个参数配置他的日志详细程度,分为一个v到5个v,其中v越多,详细度越高   mogod.conf port = d ...

  4. python剑指offer剪绳子

    题目 给你一根长度为n的绳子,请把绳子剪成m段 (m和n都是整数,n>1并且m>1)每段绳子的长度记为k[0],k[1],…,k[m].请问k[0]k[1]…*k[m]可能的最大乘积是多少 ...

  5. cocoapods 类库管理利器

    作为iOS开发者,第三方类库的使用是最经常的,但鉴于第三方类库的不断更新以及其可能需要依存其他类,如果要使用最新版那么我们需要重新下载再添加到项目中,无疑带来一些繁琐的麻烦,那么现在这里就有一款能解决 ...

  6. Symmetric Difference-freecodecamp算法题目

    Symmetric Difference 1.要求 创建一个函数,接受两个或多个数组,返回所给数组的对等差分(symmetric difference) 例子:给出两个集合 (如集合 A = {1, ...

  7. 第一篇:UnicodeDecodeError: 'utf-8' codec can't decode byte 0xc3 in position 0: invalid continuation byte

    需求:python如何实现普通用户登录服务器后切换到root用户再执行命令 解决参考: 代码: def verification_ssh(host,username,password,port,roo ...

  8. 关于mybatis callSettersOnNulls 配置

    今天做了一件坑了自己的事情,为此浪费了好多时间... 在mybatis的设置中,看到了这样的一行设置.出于程序员的好奇,去搜索了一下,这条设置是干什么的. <setting name=" ...

  9. PHP实现消息推送

    我们做web的时候偶尔会遇到消息推送,如图示例(红框位置) 当我们遇到这种功能要如何开发呢?下边将我了解的两种方法整理一下: 一.ajax轮询,定时去请求服务器数据 通过观察thinkphp官网貌似也 ...

  10. ZendFramework-2.4 源代码 - ViewManager类图