#include <iostream> #include <vector> #include <unordered_map> int main() { int n, m; std::cin >> n >> m; std::unordered_map<int, std::vector<int>> queueMap; for (int i = 1; i <= n; i++) { queueMap[i] = {i}; } while (m--) { int i, j; std::cin >> i >> j; queueMap[i].insert(queueMap[i].end(), queueMap[j].begin(), queueMap[j].end()); for (unsigned int k = 0; k < queueMap[j].size(); k++) { queueMap[queueMap[j][k]] = queueMap[i]; } } std::cout << queueMap.size() << std::endl; for (auto it = queueMap.begin(); it != queueMap.end(); it++) { for (auto student : it->second) { std::cout << student << " "; } std::cout << std::endl; } return 0; }
时间: 2024-04-18 19:31:07 浏览: 135
#include <iostream>
这段代码是一个队列合并的实现。首先,从输入中读取n和m,分别表示队列的数量和操作的次数。然后,创建一个unordered_map来存储队列的映射关系,其中键是队列的编号,值是一个vector,表示队列中的元素。
接下来,使用一个循环将每个队列初始化为只包含自己。然后,对于每个操作,从输入中读取i和j,表示要合并的两个队列的编号。
将队列j的元素插入到队列i的末尾,并且更新所有被合并队列的映射。具体地说,将队列j中的每个元素在映射中更新为队列i。
最后,输出合并后的队列数量,并按照顺序输出每个队列的元素。
请注意,此代码未处理输入错误或无效的情况。在实际使用中,可能需要添加一些错误处理机制。
阅读全文