采用邻接表创建无向图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 提供更好的性能,特别是在需要频繁插入和查找操作的场景中。

posted on 2024-06-14 22:28  fafrkvit  阅读(21)  评论(1)    收藏  举报