题意 求基环树森林所有基环树的直径之和 题解 考虑的一个基环树的直径,只会有两种情况,第一种是某个环上结点子树的直径,第二种是从两个环上结点子树内的最深路径,加上环上这两个结点之间的较长路径. 那就找环,然后环上每个结点做树形\(dp\).然后把环断成长度为\(2n\)的链,记录环上的前缀和\(sum\).假设结点\(u\)子树内最深路径为\(dep[u]\),那么就是求\(max(sum[i] - sum[j] + dep[i] + dep[j]),j < i\).这个就转换成\(max(su…
写的大多只是思路,比较简单的细节和证明过程就不放了,有需者自取. 基环树简介 简单说一说基环树吧.由名字扩展可得这是一类以环为基础的树(当然显然它不是树. 通常的表现形式是一棵树再加一条非树边,把图画出来是一种向外发散的有趣图案. 体现在[题目条件]上就是一个 \(n\) 个点 \(n\) 条边的连通图或保证每一个点的入度 / 出度为 \(1\) (有向图:前者称为外向树,后者称为内向树). 常常会把一些在树上做的 dp 放在基环树上以提高题目难度. 惯用思路是先把以环上的点为根的子树内的信息跑…
题意 基环树上找到一个点(可以在边上)使得它到树上最远点的距离最小,输出最小距离 题解 如果是一棵树,答案就是树的直径\(/2\) 如果是基环树,那么很好证明删去环上的某一条边是不影响答案的.于是断环为链,单调队列维护\(dep+sum,dep-sum\)的最大值和次大值,然后算直径,如果两个最大值是同个结点就取一个次大,否则都取最大. #include <algorithm> #include <cstdio> using namespace std; typedef long…
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)$的单调队列做法,留一个坑以…
题意:给定N点N边的无向连通图,现在让你在图中找一点作为餐厅,使得最远点距离这点最近. 思路:为了保留整数,我们求最小直径,最后去除2.  直径来源于两部分: 1,在外向树中: 那么就是树的直接,一棵树求直径直接跑一边DP就可以了.(或者两遍BFS吧,麻烦一点而已),假设最大值为ans1. 2,可能通过了环. 一定有环上的边不在直接上,我们枚举这个断边. 那么现在就相当于一个X元环,环上的边有权值,X个点也各有权值,现在枚举每个断边,变成一条带枝桠的链,让你求ans2=min(最长链). 答案就…
参考:https://blog.csdn.net/shiyukun1998/article/details/44684947 先看对于树的情况 设d[u]为点u向儿子走的期望长度和,du[u]为u点的度数,f[u]为u向儿子走的期望长度,只需要dfs两遍,一次求向儿子的d[u]+=f[e[i].to]+e[i].va;,第二次求向父亲走的情况d[e[i].to]+=(d[u]-e[i].va-f[e[i].to])/max(1,du[u]-1)+e[i].va;(u表示向父亲走之后能再向父亲的非…
「BZOJ 4228」Tibbar的后花园 Please contact lydsy2012@163.com! 警告 解题思路 可以证明最终的图中所有点的度数都 \(< 3\) ,且不存在环长是 \(3\) 的倍数的环.这是充分必要的,由于图不联通,其就是由若干个联通块组成的,每个联通块是一条链或者环长不是 \(3\) 的倍数的环,然后强上EGF就好了. 列出链的EGF和环的EGF \[ A(x)=x+\sum_{i\geq2}\dfrac{x^i}{2} \\ B(x)=\sum_{i>3,…
「BZOJ 3645」小朋友与二叉树 解题思路 令 \(G(x)\) 为关于可选大小集合的生成函数,即 \[ G(x)=\sum[i\in c ] x^i \] 令 \(F(x)\) 第 \(n\) 项的系数为为权值为 \(n\) 的二叉树的方案数,显然有 \[ F(x)=F(x)^2G(x)+1\\ F^2(x)G(x)-F(x)+1=0 \\ F(x)=\dfrac{1\pm\sqrt{1-4G(x)}}{2G(x)} \] 当 \(x\to 0\) 时,\(F(x)\) 的值为 \(1\)…
「BZOJ 4502」串 题目描述 兔子们在玩字符串的游戏.首先,它们拿出了一个字符串集合 \(S\),然后它们定义一个字符串为"好"的,当且仅当它可以被分成非空的两段,其中每一段都是字符串集合 \(S\) 中某个字符串的前缀.比如对于字符串集合 \(\{ "abc","bca" \}\),字符串 \("abb"\),\("abab"\)是"好"的 \(("abb"=…
「BZOJ 4289」 PA2012 Tax 题目描述 给出一个 \(N\) 个点 \(M\) 条边的无向图,经过一个点的代价是进入和离开这个点的两条边的边权的较大值,求从起点 \(1\) 到点 \(N\) 的最小代价.起点的代价是离开起点的边的边权,终点的代价是进入终点的边的边权 \(N \leq 10^5, M \leq 2 \times 10^5\) 解题思路 : 首先考虑一个暴力的做法,建一个新图,把每一条边看成新图的一个点' 对于原图的每一个点 \(u\) 对于边 \((u, x),…