\(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;
}

4.2 省选模拟赛 旅行路线 广义SAM的更多相关文章

  1. 【洛谷比赛】[LnOI2019]长脖子鹿省选模拟赛 T1 题解

    今天是[LnOI2019]长脖子鹿省选模拟赛的时间,小编表示考的不怎么样,改了半天也只会改第一题,那也先呈上题解吧. T1:P5248 [LnOI2019SP]快速多项式变换(FPT) 一看这题就很手 ...

  2. @省选模拟赛03/16 - T3@ 超级树

    目录 @description@ @solution@ @accepted code@ @details@ @description@ 一棵 k-超级树(k-SuperTree) 可按如下方法得到:取 ...

  3. 3.28 省选模拟赛 染色 LCT+线段树

    发现和SDOI2017树点涂色差不多 但是当时这道题模拟赛的时候不会写 赛后也没及时订正 所以这场模拟赛的这道题虽然秒想到了LCT和线段树但是最终还是只是打了暴力. 痛定思痛 还是要把这道题给补了. ...

  4. 省选模拟赛第四轮 B——O(n^4)->O(n^3)->O(n^2)

    一 稍微转化一下,就是找所有和原树差距不超过k的不同构树的个数 一个挺trick的想法是: 由于矩阵树定理的行列式的值是把邻接矩阵数值看做边权的图的所有生成树的边权乘积之和 那么如果把不存在于原树中的 ...

  5. NOI2019省选模拟赛 第五场

    爆炸了QAQ 传送门 \(A\) \(Mas\)的童年 这题我怎么感觉好像做过--我记得那个时候还因为没有取\(min\)结果\(100\to 0\)-- 因为是个异或我们肯定得按位考虑贡献了 把\( ...

  6. NOI2019省选模拟赛 第六场

    传送门 又炸了-- \(A\) 唐时月夜 不知道改了什么东西之后就\(A\)掉了\(.jpg\) 首先,题目保证"如果一片子水域曾经被操作过,那么在之后的施法中,这片子水域也一定会被操作&q ...

  7. 省选模拟赛 arg

    1 arg (arg.cpp/in/out, 1s, 512MB)1.1 Description给出一个长度为 m 的序列 A, 请你求出有多少种 1...n 的排列, 满足 A 是它的一个 LIS. ...

  8. 5.10 省选模拟赛 拍卖 博弈 dp

    LINK:拍卖 比赛的时候 前面时间浪费的有点多 写这道题的时候 没剩多少时间了. 随便设了一个状态 就开始做了. 果然需要认真的思考.其实 从我的状态的状态转移中可以看出所有的结论. 这里 就不再赘 ...

  9. 5.5 省选模拟赛 B Permutation 构造 贪心

    LINK:Permutation 对于这种构造神题 我自然是要补的.为啥就我没想出来哇. 30分还是很好写的 注意8!实际上很小 不需要爆搜 写bfs记录状态即可.至于判断状态是否出现与否 可以开ma ...

随机推荐

  1. 5.scrapy过滤器

    scrapy过滤器 1. 过滤器 当我们在爬取网页的时候可能会遇到一个调转连接会在不同页面出现,这个时候如果我们的爬虫程序不能识别出 该链接是已经爬取过的话,就会造成一种重复不必要的爬取.所以我们要对 ...

  2. python入门007

    一.深浅copy 浅拷贝:是把原列表第一层的内存地址完全拷贝一份给新列表.即只能保证对原列表中第一层地址(不可变类型)的改操作不受影响,涉及到原列表中第二层地址(可变类型)的改操作时,原列表变,新列表 ...

  3. 数据可视化之powerBI基础(三)编辑交互,体验更灵活的PowerBI可视化

    https://zhuanlan.zhihu.com/p/64412190 PowerBI可视化与传统图表的一大区别,就是可视化分析是动态的,通过页面上筛选.钻取.突出显示等交互功能,可以快速进行访问 ...

  4. 机器学习实战基础(十四):sklearn中的数据预处理和特征工程(七)特征选择 之 Filter过滤法(一) 方差过滤

    Filter过滤法 过滤方法通常用作预处理步骤,特征选择完全独立于任何机器学习算法.它是根据各种统计检验中的分数以及相关性的各项指标来选择特征 1 方差过滤 1.1 VarianceThreshold ...

  5. python技巧 namedtuple

    python的namedtuple可以创建一个带字段名的元祖和一个带名字的类 In [1]: from collections import namedtuple ...: ...: nginx=na ...

  6. IOS10 window.navigator.geolocation.getCurrentPosition 无法定位问题

    在iOS 10中,苹果对webkit定位权限进行了修改,所有定位请求的页面必须是https协议的. 如果是非https网页,在http协议下通过HTML5原生定位接口会返回错误,也就是无法正常定位到用 ...

  7. JavaScript定时器及回调用法

    JavaScript定时器及回调用法 循环定时任务 // 假设现在有这样一个需求:我需要请求一个接口,根据返回结果判断需不需要重复请求,直到达到某一条件为止,停止请求执行某操作 <script ...

  8. kubernetes系列(十七) - 通过helm安装dashboard详细教程

    1. 前提条件 2. 配置https证书为secret 3. dashboard安装 3.1 helm拉取dashboard的chart 3.2 配置dashboard的chart包配置 3.3 he ...

  9. 题解 P1484 种树

    题目 传送门 cyrcyr今天在种树,他在一条直线上挖了 n 个坑. 这n个坑都可以种树,但为了保证每一棵树都有充足的养料,cyrcyr不会在相邻的两个坑中种树. 而且由于cyrcyr的树种不够,他至 ...

  10. Windows搭建Redis集群-详细教程

    一.集群知识 1.集群的概念 所谓的集群,就是通过添加服务器的数量,提供相同的服务,从而让服务器达到一个稳定.高效的状态. 2.使用redis集群的必要性 问题:我们已经部署好了redis,并且能启动 ...