P10001
P1001 图操作 -1
Description
初始给出一个空的图 \(G=(V,E)\),你的代码需要支持如下操作并返回可能的结果:
- 尝试添加顶点 \(x\)(可能已经存在),添加后输出当前顶点个数。
- 尝试添加无向边 \(e=(u,v)\),若 \(u\notin V\) 或 \(v\notin V\),忽略本次操作。
- 查询顶点 \(x\) 的度,保证 \(x\) 存在。
- 查询点集 \(V_t\) 的点导出子图的边数,保证 \(V_t\sub V\).
- 查询边集 \(E_t\) 的边导出子图的点数,保证 \(E_t\sub E\).
添加的边可能出现重边,但不会有自环,即 \(u\ne v\)。
点导出子图:\(G\) 的点导出子图 \(G[V_t]\) 中,其顶点集为 \(V_t\),边集为 \(G\) 的边集 \(E\) 中两个顶点均属于 \(V_t\) 的边的集合。
边导出子图:\(G\) 的边导出子图 \(G[E_t]\) 中,其边集为 \(E_t\),顶点集为在 \(E_t\) 中出现的顶点的集合。
Format
Input
第一行一个整数 \(q\),表示操作次数。
接下来 \(q\) 行,每行第一个整数 \(op\) 表示操作类型,若:
- \(op=1\),接下来输入一个整数 \(x\),表示当前添加的顶点编号。
- \(op=2\),接下来输入两个整数 \(u,v\),表示添加无向边 \(e=(u,v)\)。
- \(op=3\),接下来输入一个整数 \(x\),表示查询顶点 \(x\) 的度。
- \(op=4\),接下来输入一个整数 \(s\),表示输入点集的大小,然后输入 \(s\) 个整数 \(v_i\), 表示点集的内容,其中 \(v_i\) 表示顶点编号。
- \(op=5\),接下来输入一个整数 \(s\),表示输入边集的大小,然后输入 \(s\) 个整数 \(e_i\), 表示边集的内容,其中 \(e_i\) 表示第 \(e_i\) 条成功添加的边。
对于前 \(30\%\) 的数据,\(op\in\{1,2,3\}\).
对于前 \(50\%\) 的数据,保证所有输入的数都是 \(0∼500\) 的整数。
对于 \(100\%\) 的数据,保证 \(q\le 10^5, op\in\{1,2,3,4,5\},1\le x,u,v\le 10^5\), 操作 \(4\) 和 操作 \(5\) 均不超过 \(10\) 次,单次输入的 \(v_i\) 或 \(e_i\) 两两互不相同。
保证所有操作满足题目描述,保证每一行的两个相邻整数都仅用一个空格隔开。
Output
对于每个 \(op=\ne 2\) 的输入,都输出单独的一行表示结果。
对于 \(op=1\),输出一个整数表示当前顶点个数。
对于 \(op=3\),输出一个整数分别表示查询顶点的度。
对于 \(op=4\),输出一个整数表示点导出子图的边数。
对于 \(op=5\),输出一个整数表示边导出子图的点数。
Samples
Sample Input 1
20
1 17
1 9
1 5
1 14
2 5 17
2 14 9
2 17 14
2 14 17
2 9 5
5 3 2 1 5
4 3 5 9 17
3 14
5 1 3
4 3 14 9 17
4 1 5
2 1 9
5 2 3 5
4 3 5 9 14
5 2 5 4
5 2 1 5
Sample Output 1
1
2
3
4
4
2
3
2
3
0
4
2
4
3