点对统计
时间限制:C/C++/Rust/Pascal 4秒,其他语言8秒
空间限制:C/C++/Rust/Pascal 1024 M,其他语言2048 M
64bit IO Format: %lld

题目描述

小X手里有一个无向图,有n个点,编号为1\sim n,有m1条无向边。

凑巧,小Y手里也有一个无向图,也是编号为1\sim nn个点,有m2条无向边。

他俩感觉很亲切,因此想统计一下有多少个点对[x,y]满足以下三个条件:

1、1\le x < y \le n

2、在小X的无向图里,x,y可以互相到达

3、在小Y的无向图里,x,y可以互相到达

点很多,你能帮帮他们吗?

输入描述:

第一行包含三个整数n,m1,m2,满足1\le n \le 2\times 10 ^ 6,0\le m1,m2 \le 2\times 10^6代表两个无向图的点的数量和边的数量。

接下来m1行,每行两个空格隔开的整数x_i,y_i,满足1\le x_i,y_i \le n表示第一个图里的每条边。

接下来m2行,每行两个空格隔开的整数x_i,y_i,满足1\le x_i,y_i \le n表示第二个图里的每条边。

输出描述:

请输出一个整数,表示满足条件的点对数量
示例1

输入

复制
3 3 3
1 2
2 3
1 3
1 2
2 3
1 3

输出

复制
3

说明

对于第一个样例,两个图都是三个点的完全图,有三个点对满足条件:[1,2],[1,3],[2,3]。
示例2

输入

复制
4 3 3
1 2
2 3
1 3
2 3
2 4
3 4

输出

复制
1

说明

对于第二个样例,第一个图里123可以互相到达,第二个图里234可以互相到达,因此有一个点对满足条件:[2,3]。
示例3

输入

复制
4 6 2
1 2
1 3
1 4
2 3
2 4
3 4
1 2
3 4

输出

复制
2

说明

对于第三个样例,第一个图是四个点的完全图,第二个图里12可以互相到达,34可以互相到达,因此有两个点对满足条件:[1,2],[3,4]。