代码能力太弱。。想了5分钟写了1小时。。
耐下心来读完题,然后发现最优解一定是不会出现第一种情况的,也就是说如果访问一个串之前一定要访问这个串的所有后缀。
那么我们把串反过来,转换成前缀,也就是沿着trie走的问题。然后就贪心一波,先走子树小的再走子树大的就行了。

#include<iostream>
#include<cstdio>
#include<vector>
#include<cstring>
#include<map>
#include<algorithm>
using namespace std;const int N=510005;
int n,cnt,dfn;
long long ans;
int id[N],fa[N],ch[N][26],size[N];
bool flag[N];
char s[N];
vector<pair<int,int> > a[N];inline int read()
{int a=0,f=1; char c=getchar();while (c<'0'||c>'9') {if (c=='-') f=-1; c=getchar();}while (c>='0'&&c<='9') {a=a*10+c-'0'; c=getchar();}return a*f;
}inline void add()
{scanf("%s",s+1);int len=strlen(s+1),c,now=0;for (int i=len;i;i--){c=s[i]-'a';if (ch[now][c]) now=ch[now][c];else now=ch[now][c]=++cnt;}size[now]=1;
}void dfs(int x,int f)
{id[x]=++dfn; ans+=id[x]-id[f];for (int i=0;i<a[x].size();i++)dfs(a[x][i].second,x);
}void build(int x,int f)
{if (size[x]) fa[x]=f,f=x;for (int i=0;i<26;i++)if (ch[x][i]) build(ch[x][i],f);
}int main()
{n=read();for (int i=1;i<=n;i++) add();build(0,0);for (int x=cnt;x;x--)if (size[x]) size[fa[x]]+=size[x],a[fa[x]].push_back(make_pair(size[x],x));for (int x=0;x<=cnt;x++)if (size[x]) sort(a[x].begin(),a[x].end());dfn=-1;dfs(0,0);cout << ans << endl;return 0;
}

4567: [Scoi2016]背单词 trie+贪心相关推荐

  1. BZOJ 4567 [SCOI2016]背单词 (Trie树、贪心)

    题目链接: https://www.lydsy.com/JudgeOnline/problem.php?id=4567 题解: 显然答案一定小于\(n\times n\), 字符串倒过来变成前缀建Tr ...

  2. 【bzoj4567】[Scoi2016]背单词 贪心+trie树

    我个傻逼,这么水的题还调了那么久. 把所有的串都反过来,建trie树,很明显,不同子树间是不影响的. 一定是先选择父亲节点再选子节点,同一个节点先选子树大小最小的儿子即可. 一开始想错了,以为可以直接 ...

  3. BZOJ4567 SCOI2016背单词(trie+贪心)

    倒过来变成查询前缀.考虑怎么排序.第一条代价n*n就相当于inf,说明一个单词的所有前缀都要排在它前面.那么串的依赖关系就是trie的结构.二三条说明代价是Σidi-idfa,那么显然最后的编号应该是 ...

  4. [Scoi2016]背单词[字典树+dfs重构树[类似虚树]]

    解题思路:很明显第一个条件是可以避免的,第二个条件是第三个条件的特殊情况,所以有用的只有第三个条件,现在我们就是想将这些单词重排使得每个单词后缀都在这个单词的前面并且代价最小 我们举个例子: 6 a ...

  5. 牌组资源英语_「桌游推荐」如果当年有这种能背单词的桌游,我早就成英语学霸了...

    英语课上的背单词,像语文课上的背诵全文一样,是学生时代不少英语"学渣"们的噩梦,甚至现在很多人拿起英语词典还是从"abandon"开始痛苦的背单词之旅. 其实英 ...

  6. BNU27935——我爱背单词——————【数组模拟】

    我爱背单词 Time Limit: 1000ms Memory Limit: 65536KB 64-bit integer IO format: %lld      Java class name:  ...

  7. B.背单词 。。 KMP。模板题

    大四了,Leyni感觉好惆怅,因为找不到工作,所以最后决定考研了,可是Leyni的英语好差,没办法,先从最基本的背单词开始吧.那么多单词怎么才好背呢,话说考研界盛传利用前缀背单词,貌似好神奇的样子.因 ...

  8. 【青少年编程】黄羽恒:我要背单词

    「青少年编程竞赛交流群」已成立(适合6至18周岁的青少年),公众号后台回复[Scratch]或[Python],即可进入.如果加入了之前的社群不需要重复加入. 微信后台回复"资料下载&quo ...

  9. 不用“背”单词,一个方法从普通二本到哥伦比亚大学:我是如何做到的?

    "学英语太难.太费劲了."我听过无数人这么说. 然而,我的学员们,却都只用了短短3-6个月时间,就以惊人速度提高了英语: 小磊:勉强踩着2本线上了大学,四级考了3次没过,毕业时却拿 ...

  10. 别光顾着背单词了,每天花18分钟做这件事,英语水平暴增!

    在知乎上看过一个问题:在当今社会,英语还重要吗? 点赞第一的回答是-- 英语可以差,但你的口语一定要好! 你记住了1万个单词.将语法书倒背如流.英语成绩名列前茅.英语证书一大摞. 但你的口语差,看见老 ...

最新文章

  1. CV08-数据预处理与数据增强
  2. java 捕获数据包,缓存从pcap捕获的数据包
  3. 1.SQL数据定义语言(基础)
  4. Git工作原理及功能结构
  5. Leaflet文档阅读笔记-Zoom levels笔记
  6. VS2005 TS SP1压缩整合完整版BT下载
  7. 容器映像_容器映像中的内容:应对法律挑战
  8. Startup Error: Unable to detect graphics environment
  9. 接口带声音输出吗_智能化时代,你的功放跟得上科技的脚步吗?
  10. iPhone企业应用实例分析之三:程序框架分析
  11. 91.p9p.co ev.php下载,恶意软件分析 URL链接扫描 免费在线病毒分析平台 | 魔盾安全分析...
  12. mysql所有版本介绍_MySQL各版本介绍
  13. 关于睡眠分期中人工判读的一些个人总结
  14. Linux系统服务 2 ---- DNS基础及域名系统架构
  15. 基于stm32c8t6和mpu6050的三轴云台控制
  16. apache创建虚拟主机
  17. 一个好用的hibernate泛型dao
  18. Kafka producer程序本地运行时发送信息失败解决方案
  19. 有理展开定理与递推数列通项公式
  20. 使用C#通过串口控制IT6333B电流源

热门文章

  1. 计算机老师素质能力提升计划要求,教师2021个人素质提升计划范文
  2. 数据库分片以及schema概念
  3. 如何在PDF上添加电子签名?签名技巧分享
  4. python爬虫大众点评字体反爬
  5. c语言自动任务,【C语言训练】委派任务* (C语言代码)
  6. ChinaMode评选:2010最受瞩目的45个初创公司/产品
  7. 搞笑git 程序员改bug_这些神奇又搞笑的bug,真的让程序员万万没想到!
  8. Excel模糊查找+数据透视
  9. 蓝色理想:建站初期如何低成本运营网站
  10. 证件照蓝底变白底的方法