EntropyIncreaser 与 动态图
题目背景
话说 NaCly_Fish 在和 $\mathsf E \color{red}\mathsf{ntropyIncreaser}$ 吃饭时,问过她一个问题:“一个无向图,支持动态加边,求两点间割点数,怎么做?”
$\mathsf E \color{red} \mathsf{ntropyIncreaser}$ 想了几秒,说:“这不是sb题吗,随便怎么做都行吧。”然后三两句道出了一个算法。
而 NaCly_Fish 还是不会,请你来教教她这题怎么做吧。
题目描述
有一个 $n$ 个点的图,初始没有边。
有 $q$ 个操作,分为 $3$ 种,具体如下:
- `1 u v` 表示在 $u,v$ 之间连一条无向边
- `2 u v` 表示求 $u,v$ 间的割边数量
- `3 u v` 表示求 $u,v$ 间的割点数量
特别地,对于 $2$、$3$ 操作,若 $u,v$ 不连通,则输出 $-1$
****
为了防止有歧义,这里给出对两点间割边和割点数量的定义:
对于所有包含 $u,v$ 的路径的节点集合之交 $S$ ,定义 $S$ 中的元素数量为 $u,v$ 间的割点数。
对于所有包含 $u,v$ 的路径的边集合之交 $T$ ,定义 $T$ 中的元素数量为 $u,v$ 间的割边数。
****
**本题强制在线。**
从第二行开始,每次的输入的 $u,v$ 都需要异或上 $\text{last}$ ,才是实际操作的 $u,v$。
$\text{last}$ 为最近一次**答案非 $-1$ 的**询问的答案,定义初始 $\text{last}=0$
ps:如果您不知道异或是什么意思,可以看这里:[xor](https://www.baidu.com/link?url=bhG_De1gZYsqrIq7dkhgGj8vP87xSSyoIwk0-5p1fyKmf58cznvq0oYJg0XGoyKNpuGk7EsvjUnyvgJ19_ZA3PhoMJ3hIufHZ5GXh1OaIoS&wd=&eqid=ab26bc160004324d000000035d1ed64e)
输入输出格式
输入格式
第一行两个正整数 $n,q$,表示节点数和操作次数。
接下来 $q$ 行,每行三个整数,表示一次操作。
输出格式
对于每个$2$、$3$ 操作,输出一行一个整数表示答案。
输入输出样例
输入样例 #1
5 10
1 1 2
1 2 3
2 1 3
3 0 1
1 3 1
1 1 6
2 3 7
1 6 7
1 7 1
3 3 6
输出样例 #1
2
2
-1
3
说明
~~题目背景为真实事件~~
### 样例说明:
实际操作为:
```cpp
5 10
1 1 2
1 2 3
2 1 3
3 2 3
1 1 3
1 3 4
2 1 5
1 4 5
1 5 3
3 1 4
```
【数据范围】
对于 $20\%$ 的数据,$1\le n,q \le 2000$ ;
对于另外 $30\%$ 的数据,所有 $2$、$3$ 操作均在 $1$ 操作之后;
对于 $100\%$ 的数据,$1\le n \le 10^5$,$1\le q \le 3\times 10^5$。
对于 $1$ 操作,保证 $u\neq v$。
By:NaCly_Fish
****
欢迎加入 EI队长粉丝裙,群号:$747262201$