P10002
P1002 图操作 -2
Description
初始给出一个两个各有 \(n\) 个点 \(0\) 条边的无向简单图 \(G_1=(V_1,E_1)\) 和 \(G_2=(V_2,E_2)\),这 \(n\) 个点编号为 \(1∼n\),你的代码需要支持如下操作并返回结果:
- 指定某一个无向图,给出一个边集合 \(E\),对于每个 \(e=(u,v)\),若其已经在这个无向图的边集中,你需要将其从无向图中删去,否则将其加入无向图边集。
- 令某一个无向图变为自己的补图,对于无向简单图 \(G=(V,E)\),它的补图指的是这样的一张图:记作 \(\overline{G}\),满足 \(V(\overline{G})=V(G)\),且对任意节点对 \((u,v)\),\((u,v)\in E\) 当且仅当 \((u,v)\notin E\)。
- 询问 \(E_1\) 和 \(E_2\) 的大小。
- 询问两个无向图的交(即 \(G_1\cap G_2=(V_1\cap V_2,E_1\cap E_2)\))的边集的大小和两个无向图并(\(G_1\cup G_2=(V_1\cup V_2,E_1\cup E_2)\))的边集的大小。
无向简单图:没有自环和重边的无向图。
Format
Input
第一行两个整数 \(n,q\),分别表示节点个数和操作次数。
接下来 \(q\) 行,每行第一个整数 \(op\) 表示操作类型,若:
- \(op=1\),接下来输入两个正整数 \(g,s\),表示当前操作第 \(g\) 个图,输入边集的大小为 \(s\),然后输入 \(2s\) 个整数 \(u_i,v_i\),表示边集的内容,其中 \(u_i,v_i\) 为插入边的两个顶点。
- \(op=2\),接下来输入一个正整数 \(g\),表示令 \(G_g\) 变为自己的补图。
- \(op=3\),表示询问 \(E_1\) 和 \(E_2\) 的大小。
- \(op=4\),询问两个无向图的交的边集的大小和两个无向图并的边集的大小。
本题共有 \(10\) 个测试点,每个测试点 \(10\) 分。
对于测试点 \(1,2\),满足 \(n,q\le 500,op\le 3\).
对于测试点 \(3,4\),满足 \(n,q\le 500\).
对于测试点 \(5,6\),满足 \(n,q\le 5000,op\in\{1,3,4\}\).
对于测试点 \(7,8\),满足 \(n,q\le 5000\).
对于全部测试点,保证 \(n,q\le 200000,op\in \{1,2,3,4\},g\in\{1,2\},u_i<v_i\le n,\sum s\le 5\times 10^5\)。
保证所有操作满足题目描述,保证每一行的两个相邻整数都仅用一个空格隔开。
Output
对于每行 \(op=3\) 和 \(op=4\) 的输入,都输出单独的一行表示结果,同一行输出多个数的用一个空格隔开,按照询问顺序给出。
Samples
Sample Input 1
4 9
1 1 3 1 2 1 3 1 4
1 2 3 1 3 2 3 3 4
3
4
2 1
4
1 1 2 1 4 2 3
3
4
Sample Output 1
3 3
1 5
2 4
3 3
1 5