NOI都是这种难度的题怎么玩嘛QAQ 原题: 小T打算在城市C开设一家外送快餐店.送餐到某一个地点的时间与外卖店到该地点之间最短路径长度是成正比的,小T希望快餐店的地址选在离最远的顾客距离最近的地方. 快餐店的顾客分布在城市C的N 个建筑中,这N 个建筑通过恰好N 条双向道路连接起来,不存在任何两条道路连接了相同的两个建筑.任意两个建筑之间至少存在一条由双向道路连接而成的路径.小T的快餐店可以开设在任一建筑中,也可以开设在任意一条道路的某个位置上(该位置与道路两端的建筑的距离不一定是整数). 现…
[LOJ 2720][BZOJ 5417][UOJ 395][NOI 2018]你的名字 题意 给定一个大串 \(S\) 以及 \(q\) 次询问, 每次询问给定一个串 \(T\) 和区间 \([l,r]\), 求 \(T\) 中有多少本质不同的子串不是 \(S[l:r]\) 的子串. \(|S|\le 5\times 10^5,q\le 10^5,\sum|T|\le10^6\). 题解 普通的码农字符串题... 获得成就: \(40\texttt{min}(2400\texttt{s})\)…
题目链接:快餐店 震惊!某ZZ选手此题调了一天竟是因为……>>点击查看 一般碰到这种基环树的题都要先想想树上怎么做.这道题如果是在树上的话……好像求一遍直径就做完了?答案就是直径长度的一半…… 然后我们来考虑一下基环树上的情况.假设我们选中了一个位置\(u\)作为快餐店,那么环上的有一条边是没有用的,也就是说\(u\)到其它所有点的最短路都不会经过这条边.于是,我们就可以枚举删掉环上每条边,就需要快速统计剩下这棵树的直径.如果这课树的直径没有经过环上的边,那么我们是可以通过预处理环上每棵树的直…
http://www.lydsy.com/JudgeOnline/problem.php?id=3242 http://uoj.ac/problem/126 http://codevs.cn/problem/3047/ 因为存在一条边,答案所在的点走向左右的城的最短路都不会经过这条边. 所以枚举这条边,剩下的用线段树维护. 线段树初始化搞了好久,忘了在外向树上做dp,树形dp时记录也错了,总之调了一天,吃枣药丸啊QwQ 时间复杂度$O(nlogn)$,听说有$O(n)$的单调队列做法,留一个坑以…
题意 基环树上找到一个点(可以在边上)使得它到树上最远点的距离最小,输出最小距离 题解 如果是一棵树,答案就是树的直径\(/2\) 如果是基环树,那么很好证明删去环上的某一条边是不影响答案的.于是断环为链,单调队列维护\(dep+sum,dep-sum\)的最大值和次大值,然后算直径,如果两个最大值是同个结点就取一个次大,否则都取最大. #include <algorithm> #include <cstdio> using namespace std; typedef long…
http://www.lydsy.com/JudgeOnline/problem.php?id=3051 http://uoj.ac/problem/57 这道题需要平面图转对偶图,点定位,最小生成树上的倍增(NOIP2013火车运输)3个步骤. 最后一个很简单了,前两个比较麻烦.. 点定位可以用玄学的梯形剖分(并不会orz),但这里可以离线用扫描线,类似圆的异或并那道题. 平面图转对偶图要把一条边拆成两条有向边,把每条有向边找出和它夹角最小的,这个过程要........ 算了不说了,网上的题解…
http://www.lydsy.com/JudgeOnline/problem.php?id=3672 http://uoj.ac/problem/7 链上的情况可以用斜率优化dp.树上用斜率优化dp时,单调队列的复杂度是均摊$O(n)$的,所以放到树上做“可持久化单调队列”复杂度是$O(n^2)$的,所以不能树上斜率优化. 这道题可以用树链剖分(时间复杂度$O(nlog^3n)$)或者点分治套cdq分治(时间复杂度$O(nlog^2n)$).因为树链剖分感觉比较难写,而且每个节点用vecto…
http://www.lydsy.com/JudgeOnline/problem.php?id=3670 http://uoj.ac/problem/5 可以建出"KMP自动机"然后在树上二分或单调计算. 也可以不建树,每个位置维护fail指针和nxt指针. nxt指针指的是在小于等于当前位置除以2的fail指针能跳到的最大的位置,都可以\(O(n)\)维护. #include<cstdio> #include<cstring> #include<algo…
http://www.lydsy.com/JudgeOnline/problem.php?id=4650 http://uoj.ac/problem/219 这里有非常好的题解qwq 接着道题复习一下模板(还是打错了好多地方_(:з」∠)_) 以及后缀数组面对多组数据清数组的正确打开方式qwq 因为求height数组时依赖n之后的字符都为空,倍增算法利用sa计算第一关键字时也依赖n之后的关键字都为空. 所以应至少在字符串第n+1位清空来终止可能会越界的求height数组的函数.还要把存第一关键字…
http://uoj.ac/problem/125 我真是日狗了...... 果然还是没有耐心读题,搞到读题读错了2个地方,结果调试了半天...... 言归正传. 动态规划. 这种题目很常见. 我们发现竖着做比较麻烦,那么可以横着做. 打竖将"NOI“分成11种类型. F[i][j][k][l]表示第i列的涂色部分的上边界为j,下边界为k,类型为l. 然后转移. 从2类型->2类型有点麻烦,我们可以借组一个辅助数组b,见程序注释部分. #include<cstdio> #inc…