博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
loj6198 谢特
阅读量:5146 次
发布时间:2019-06-13

本文共 1104 字,大约阅读时间需要 3 分钟。

显然可以构造一棵后缀树,将问题转化成了在这棵树上找到两个点\(i,j\),使得\(w_i\bigoplus w_j+ len_{\rm LCA(i,j)}\)最大

于是在树上\(dfs\)的时候启发式合并\(\rm trie\)就好了,发现自己已经菜到不会写\(\rm trie\)了,\(\rm trie\)的插入做到最后一层还是有节点的,得先添加这个节点,之后才能返回

#include
#define re register#define LL long longconst int maxn=2e5+5;inline int read() { char c=getchar();int x=0;while(c<'0'||c>'9') c=getchar(); while(c>='0'&&c<='9') x=(x<<3)+(x<<1)+c-48,c=getchar();return x;}std::vector
v[maxn];char S[maxn>>1];int a[maxn>>1],tax[maxn>>1],A[maxn];int ch[maxn*25][2];int len[maxn],son[maxn][26],rt[maxn],fa[maxn];int n,lst=1,cnt=1,tot,ans;inline int max(int a,int b) {return a>b?a:b;}inline int ins(int now,int w,int v) { if(!now) now=++tot; if(w==-1) return now; int u=(v>>w)&1; ch[now][u]=ins(ch[now][u],w-1,v); return now;}inline int chk(int now,int w,int v) { if(w==-1) return 0; int u=(v>>w)&1; if(ch[now][u^1]) return (1<
v[fa[x]].size()) std::swap(rt[x],rt[fa[x]]),std::swap(v[x],v[fa[x]]); int now=0; for(re int j=0;j

转载于:https://www.cnblogs.com/asuldb/p/11414328.html

你可能感兴趣的文章
7zip在DOS命令行用法总结
查看>>
Xcode开发 字符串用法
查看>>
在IIS中实现JSP
查看>>
[转载]Meta标签详解
查看>>
File,FileStream,byte[]3者互相转换总结(转)
查看>>
springboot 使用devtools 实现热部署
查看>>
Yahoo网站性能最佳体验的34条黄金守则
查看>>
forward与redirect的区别
查看>>
网络编程之socket
查看>>
Maven pom项目部署
查看>>
Cognos报表验证(添加字段)
查看>>
学术-物理-维空间:一维空间
查看>>
CSS:CSS 实例
查看>>
innodb的存储结构
查看>>
焦点控制
查看>>
python-文件读写操作
查看>>
P1129 [ZJOI2007]矩阵游戏 二分图匹配
查看>>
Git 内部原理之 Git 对象哈希
查看>>
Vue中引入TradingView制作K线图
查看>>
爱历史 - 朝代歌
查看>>