\(n\leq 100000\)

题目上求出 多少条本质不同的路线。

首先定义了 相似的城市为度数相同的城市。

还定义了两条路线相同当且仅当长度相同 且对应位置的城市都是相似的。

考虑这张图的形态 n-1条边 且每个点都能到1号点。

不可能出现环 因为 考虑如果出现环必然 x个点 x条边 根据鸽巢原理 一个点被孤立了 所以这是一棵内向树。

暴力显然是把所有长度相同的路线给拿出来然后去重比对。

如何去重 我们考虑把度数相同的点就定义为其度数大小 然后很容易利用hash或者暴力进行比对。

进一步的 发现这类似于字符串。

可以发现 整棵树是一个字典树。问题是 求出本质不同的 子串个数

建立广义SAM.没了。

考虑 字符集1e5 开map 没了...

题解中给了另外一种做法 考虑利用树上SA来求。

发现树上后缀排列不易。最后统计答案也是两个相邻排名的串统计的。

考虑枚举两个相邻排名的串 然后统计一下LCP即可。

LCP可以hash+倍增做 题解中是倍增做了一发SA我不太明白 它是咋做的。

const int MAXN=200010;
int n,cnt=1,len1;ll ans;
int a[MAXN],len[MAXN],f[MAXN];
int lin[MAXN],ver[MAXN],nex[MAXN];
map<int,int>t[MAXN];
inline void add(int x,int y)
{
ver[++len1]=y;
nex[len1]=lin[x];
lin[x]=len1;
++a[x];++a[y];
}
inline int insert(int x,int last)
{
int p=last;
if(t[p].find(x)!=t[p].end())
{
int q=t[p][x];
if(len[q]==len[p]+1)return q;
int nq=++cnt;
t[nq]=t[q];f[nq]=f[q];
len[nq]=len[p]+1;
f[q]=nq;
while(p&&t[p][x]==q)
{
t[p][x]=nq;
p=f[p];
}
return nq;
}
int np=last=++cnt;
len[np]=len[p]+1;
while(p&&t[p][x]==0)
{
t[p][x]=np;
p=f[p];
}
if(!p)f[np]=1;
else
{
int q=t[p][x];
if(len[q]==len[p]+1)f[np]=q;
else
{
int nq=++cnt;
t[nq]=t[q];f[nq]=f[q];
len[nq]=len[p]+1;
f[np]=f[q]=nq;
while(p&&t[p][x]==q)
{
t[p][x]=nq;
p=f[p];
}
}
}
ans+=len[np]-len[f[np]];
return last;
}
inline void dfs(int x,int v)
{
v=insert(a[x],v);
go(x)dfs(tn,v);
}
int main()
{
freopen("route.in","r",stdin);
freopen("route.out","w",stdout);
get(n);
rep(1,n-1,i)
{
int get(x);int get(y);
add(y,x);
}
dfs(1,1);putl(ans);return 0;
}

最新文章

  1. TCP ,UDP概念和TCP三次握手连接 的知识点总结
  2. SOA的浅析
  3. Makefile 规则的使用
  4. metasploit模块字典爆破tomcat
  5. java 中与 或 非 异或 和位移运算
  6. Oracle 行转列,列转行
  7. CSS边距---盒子模型
  8. httpd的警告
  9. VS2013中BOOST库的环境配置与使用
  10. Return 和 Break 的区别
  11. js时间格式的转换
  12. leetcode&mdash;Palindrome 解题报告
  13. jQuery慢慢啃之文档处理(五)
  14. 4th day
  15. 利用Apache POI 实现简单的Excel表格导出
  16. CentOS7上Docker安装与卸载
  17. Mybatis源码之Statement处理器CallableStatementHandler(六)
  18. 《HelloGitHub》第 12 期
  19. ftp搭建安装
  20. QEMU KVM libvirt 手册(1): 安装

热门文章

  1. Java面向对象详解-上
  2. Linux 下载工具推荐: Motrix && qbittorrent
  3. Python 数字格式转换
  4. SSTI(模板注入)
  5. 数据可视化之powerBI技巧(十七)在Power BI中对数据进行分组
  6. C#-性能-二维数组和数组的数组的性能比较
  7. [译]使用DOT语言和GraphvizOnline来可视化你的ASP.NETCore3.0终结点01
  8. Python Ethical Hacking - VULNERABILITY SCANNER(1)
  9. svg 使用中的疑惑点
  10. noi linux gedit 配置(c++环境)