R和S是A上的关系,求RοS,输入的第一行是A中元素的个数n、R中序偶的个数m、S中序偶的个数h,接下来的m行对应R中的序偶,每行对应一个序偶,再接下来的h行对应S中的序偶,每行对应一个序偶。输出RοS中序偶的个数。1≤n≤5000, 0≤m≤10000,0≤h≤10000。 样例: 输入: 5 3 2 1 2 1 1 3 5 1 4 5 3 输出: 2 输入说明:第一行5 3 2表示A中有1到5这5个元素,R中有3个序偶,对应第2行到第4行,S中有2个序偶,对应第5行到第6行,R={<1,2>,<1,1>,<3,5>}, S={<1,4>,<5,3>} 输出说明:RοS={<1,4>,<3,3>},RοS中有2个序偶,所以输出2。
#include <iostream>
#include <vector>
#include <unordered_set>
using namespace std;
int main() {
int n, m, h;
cin >> n >> m >> h;
// 构建R和S的邻接表
vector<vector<int>> adjR(n+1); // R的邻接表
vector<vector<int>> adjS(n+1); // S的邻接表
for (int i = 0; i < m; i++) {
int u, v;
cin >> u >> v;
adjR[u].push_back(v);
}
for (int i = 0; i < h; i++) {
int u, v;
cin >> u >> v;
adjS[u].push_back(v);
}
// 计算RοS
unordered_set<int> res; // 存放RοS中的元素
for (int i = 1; i <= n; i++) {
for (int v : adjR[i]) {
for (int w : adjS[v]) {
res.insert(i * 10000 + w); // 将序偶存放到哈希表中
}
}
}
cout << res.size() << endl; // 输出答案
return 0;
}