题目来源:https://pintia.cn/problem-sets/994805342720868352/problems/994805456881434624
由于之前在学习数据结构和算法时,学校禁止使用C++ STL,所以现在刷算法时STL中很多趁手武器不会用,惭愧...
本题重点之一是映射,需要使用map数据结构
- #include <map>
- using namespace std;
- map<int, string> m;
复制代码 由此可以完成从 int类型的键到 string类型的值的 一对多映射
插入操作使用重载的运算符[],在插入之前,先在map中查询一下是否有已经存在- // idNumber是全局变量,初值为0<br>int Mapping(string s) {
- int ret = -1;
- if (s2i.count(s) == 0) { //完成 string<->int 一一映射,如 "AAA"<-> 0
- s2i[s] = idNumber;
- i2s[idNumber] = s;
- ret = idNumber;
- idNumber++;
- } else
- ret = s2i[s];
- return ret;
- }
复制代码 第二部分,整理一下结构体数组的排序- struct Node {
- string s;
- int n;
- };
- bool cmp(Node a, Node b) {
- return a.s < b.s; //按照string变量非降序排序,如果是想按Node中n排序同理
- }
- // 如果是结构体数组=>Node a[size];
- sort(a, a + size, cmp);
- // 如果是vector<Node> v
- sort(v.begin(), v.end(), cmp);
复制代码
其他均为正常图论算法,主要涉及对联通分量的处理,略。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |