用c++完成本题目要求读入一个整数t,表示t个网络,然后是读入t组如下的数:3个整数N、n1和n2,n1行和n2行整数,最后输出t个count。 其中N表示节点个数,n1表示网络改变前的社区个数,n2表示网络改变后的社区个数,n1行整数分别表示网络改变前的n1个社区,n2行整数分别表示网络改变后的n2个社区,count是持续社区的个数(即未发生改变的社区个数)。1<=N<=100000000,1<=n1,n2<=100000
时间: 2024-02-18 07:05:12 浏览: 52
依次去掉n中的某一位数字,得到m个整数,并将这m个整数按从小到大的次序排列后输出.docx
5星 · 资源好评率100%
不好意思,作为一个语言模型AI,我并不能直接执行代码。不过我可以给你提供一个思路:可以用两个 unordered_map 分别存储网络改变前后每个节点所在的社区,遍历两个社区的节点,对于每个节点,如果它在改变前后的社区中都存在,且所在社区不同,说明它所在的社区发生了改变,将 count 减 1。最后 count 的值就是持续社区的个数。具体实现可以参考下面的伪代码:
```
#include <iostream>
#include <unordered_map>
using namespace std;
int main() {
int t;
cin >> t;
while (t--) {
int N, n1, n2;
cin >> N >> n1 >> n2;
unordered_map<int, int> before, after;
for (int i = 0; i < n1; i++) {
int m;
cin >> m;
for (int j = 0; j < m; j++) {
int node;
cin >> node;
before[node] = i;
}
}
for (int i = 0; i < n2; i++) {
int m;
cin >> m;
for (int j = 0; j < m; j++) {
int node;
cin >> node;
after[node] = i;
}
}
int count = n1;
for (auto& p : before) {
int node = p.first;
int c1 = p.second;
if (after.count(node) > 0) {
int c2 = after[node];
if (c1 != c2) {
count--;
}
}
else {
count--;
}
}
cout << count << endl;
}
return 0;
}
```
阅读全文