CF117E Tree or not Tree

题目描述

给定一个无向连通图 $G$,包含 $n$ 个顶点和 $n$ 条边。$G$ 中没有自环或重边。每条边有两种状态:开(on)和关(off)。初始时所有边都处于关闭状态。 你还会得到 $m$ 个查询,每个查询为 $(v,u)$ ——将图 $G$ 中从顶点 $v$ 到顶点 $u$ 的最短路径上的所有边的状态取反。如果存在多条最短路径,则选择字典序最小的那一条。更正式地说,设从顶点 $v$ 到顶点 $u$ 的所有最短路径为顶点序列 $v,v_{1},v_{2},...,u$,在这些序列中选择字典序最小的那一条。 每次查询后,你需要输出仅考虑当前已打开的边时,图 $G$ 的连通分量个数。

输入格式

第一行包含两个整数 $n$ 和 $m$($3 \leq n \leq 10^{5}$,$1 \leq m \leq 10^{5}$)。接下来的 $n$ 行描述图的边,每行两个整数 $a$ $b$($1 \leq a,b \leq n$)。接下来的 $m$ 行,每行两个整数 $v$ $u$($1 \leq v,u \leq n$),表示一个查询。 保证图是连通的,没有自环或重边。

输出格式

输出 $m$ 行,每行一个整数,表示每次查询后的连通分量个数。

说明/提示

我们来看第一个样例。我们将在图片中用蓝色高亮表示已打开的边。 - 在执行任何操作前,图中没有任何边被打开,因此初始时有 5 个连通分量。 ![](https://cdn.luogu.com.cn/upload/vjudge_pic/CF117E/6d848190f5d9993cf6ddd5c1e2cd0e57d9ae6288.png) - 执行查询 $v=5,u=4$ 后,仅考虑已打开的边,图中有 3 个连通分量。 ![](https://cdn.luogu.com.cn/upload/vjudge_pic/CF117E/2f3ad3d35eecb878e654ed5cd572ed4f02ecf9ff.png) - 执行查询 $v=1,u=5$ 后,仅考虑已打开的边,图中有 3 个连通分量。 ![](https://cdn.luogu.com.cn/upload/vjudge_pic/CF117E/31e75e1c5e9c21b4cec0bc2e71e38cbba47e290d.png) 对于长度相等的两个数列 $k$,字典序比较方式如下:若存在某个 $i$($1 \leq i \leq k$),使得 $x_{i} < y_{i}$,且对于所有 $j$($1 \leq j < i$)都有 $x_{j} = y_{j}$,则序列 $x$ 的字典序小于序列 $y$。 由 ChatGPT 4.1 翻译