题意
有 $n$ 个点,初始没有连边,要求支持两个动态操作:
1. 加一条边(保证之前两点不连通)
2. 查询过一条边的简单路径数量(就是两边连通块的大小的乘积)
$n,Q\le 100000$
题解
由第一个操作保证之前两点不连通的性质可知,$n$ 个点最多被连成一棵 $n-1$ 条边的生成树。
离线做法:树剖+树状数组/线段树
我们可以离线确定出最终森林的形态(我们给森林中的每棵树随便定义个根)。
然后重新模拟操作时,只需要在最终的森林上做一些链操作(统计答案用)。
由于只有加边操作,所以模拟操作时,用并查集维护连通块。
同时我们还要维护当前以每个点为根的子树的大小。
这样,插入一条边时,假设在最终的树形态中 $u$ 是 $v$ 的父亲(这个是已知的,因为我们随便定了一个根),那从点 $u$ 到当前点