Skip to content

P10001

P1001 图操作 -1

Description

初始给出一个空的图 \(G=(V,E)\),你的代码需要支持如下操作并返回可能的结果:

  1. 尝试添加顶点 \(x\)(可能已经存在),添加后输出当前顶点个数。
  2. 尝试添加无向边 \(e=(u,v)\),若 \(u\notin V\)\(v\notin V\),忽略本次操作。
  3. 查询顶点 \(x\) 的度,保证 \(x\) 存在。
  4. 查询点集 \(V_t\) 的点导出子图的边数,保证 \(V_t\sub V\).
  5. 查询边集 \(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