采用邻接表创建无向图G ,依次输出各顶点的度。
输入格式:
输入第一行中给出2个整数i(0<i≤10),j(j≥0),分别为图G的顶点数和边数。
输入第二行为顶点的信息,每个顶点只能用一个字符表示。
依次输入j行,每行输入一条边依附的顶点。
输出格式:
依次输出各顶点的度,行末没有最后的空格。
输入样例:
5 7
ABCDE
AB
AD
BC
BE
CD
CE
DE
输出样例:
2 3 3 3 3
#include <iostream>
#include <unordered_map> // 更为高效的哈希表实现
using namespace std;
int main() {
int n, m;
string s;
unordered_map<char, int> heap; // 使用unordered_map提高查询速度
// 输入部分
cin >> n >> m;
cin >> s;
for (int i = 0; i < m; ++i) {
string x;
cin >> x;
heap[x[0]]++;
heap[x[1]]++;
}
// 输出部分
for (int i = 0; i < s.size(); ++i) {
if (i > 0) {
cout << " ";
}
cout << heap[s[i]];
}
cout << endl;
return 0;
}
使用说明
unordered_map<char, int> heap
: 定义了一个无序映射,它的键是字符,值是整数。这个映射用于记录每个字符在边列表中出现的次数。cin >> n >> m
: 读取字符串长度和边的数量。cin >> s
: 读取字符串s
。for (int i = 0; i < m; ++i)
: 循环读取m
条边,并更新每个字符在heap
中的频次。for (int i = 0; i < s.size(); ++i)
: 遍历字符串s
,根据heap
中记录的频次输出每个字符的出现次数,并在不同字符之间加空格。
优势
使用 unordered_map
的主要优势在于其常量时间复杂度的插入和查找操作,这在处理大量数据时非常有用。相比之下,map
基于红黑树实现,其插入和查找操作的时间复杂度为 O(log n)。
总结
这段代码通过使用 unordered_map
提高了查询效率,使其更适合处理较大规模的数据集。在大多数情况下,unordered_map
会比 map
提供更好的性能,特别是在需要频繁插入和查找操作的场景中。