1034. Head of a Gang (30)
2017-02-12 10:48
411 查看
可以set保存帮派人员,合并的时候就算有重复的他也不会重复保存
具体解释再代码中
这道题也可以构建个图,然后遍历,1个连通图就是一个帮派,进行筛选保存
具体解释再代码中
这道题也可以构建个图,然后遍历,1个连通图就是一个帮派,进行筛选保存
#include<iostream> #include<map> #include<set> #include<vector> #include<string> #include<algorithm> using namespace std; #pragma warning(disable:4996) typedef struct flag{ int gang;//帮派再容器中的位置 int t;//通话时间 flag() { t = 0; } }flag; map<string, flag> s;//存各个人员信息 vector<set<string>> g;//帮派人员信息 typedef struct s_finally { string name; int num; bool operator<(const s_finally &that) const { return this->name < that.name; } }s_finally;//结果的结构 int main() { int N, M; cin >> N >> M; for (int t = 0;t < N;t++) { char str1[4], str2[4]; int temp; scanf("%s %s %d", str1, str2, &temp); if (s.find(str1) == s.end() && s.find(str2) == s.end())//两个都未出现过 { set<string> tempg; tempg.insert(str1); tempg.insert(str2); g.push_back(tempg); s[str1].t += temp; s[str2].t += temp; s[str1].gang = s[str2].gang = g.size() - 1; } else if (s.find(str1) == s.end() && s.find(str2) != s.end())//其中有一个出现过了 { g[s[str2].gang].insert(str1); s[str1].t += temp; s[str2].t += temp; s[str1].gang = s[str2].gang; } else if (s.find(str1) != s.end() && s.find(str2) == s.end()) { g[s[str1].gang].insert(str2); s[str1].t += temp; s[str2].t += temp; s[str2].gang = s[str1].gang; } else//都出现过了 { s[str1].t += temp; s[str2].t += temp; if (s[str1].gang != s[str2].gang)//出现过的两个帮派不同,需要合并 { g[s[str1].gang].insert(g[s[str2].gang].begin(), g[s[str2].gang].end()); int tt = s[str2].gang; for (auto &x : g[s[str2].gang]) s[x].gang = s[str1].gang; g[tt].clear(); } } } vector<s_finally> resault;//保存要输出的结果 for (auto x : g) { int max=0;string name;int temp=0; for (auto y : x) { temp += s[y].t; if (s[y].t > max) { max = s[y].t;name = y; } } if (temp >2* M && x.size()>2) { s_finally fi; fi.name = name; fi.num = x.size(); resault.push_back(fi); } } sort(resault.begin(), resault.end()); cout << resault.size() << endl; for (auto x : resault) printf("%s %d\n", x.name.c_str(), x.num); }
相关文章推荐
- PAT (Advanced Level) Practise 1034 Head of a Gang (30)
- PAT (Advanced Level) Practise 1034 Head of a Gang (30)
- 浙大PAT 1034 Head of aGang
- PAT 1034 Head of a Gang(图遍历+BFS)
- PAT-Java-Head of a Gang(30)
- PAT 1034 Head of a Gang 模拟
- 1034 Head of a Gang
- PAT1034;Head of a Gang
- 浙大pat | 浙大pat 牛客网甲级1048 Head of a Gang (30)最大强联通分量
- Pat(Advanced Level)Practice--1034(Head of a Gang)
- PAT [A1034]-Head of a Gang
- 【PAT 1034】 Head of a Gang 图论DFS
- pat 1034 Head of a Gang
- 1034. Head of a Gang
- Head of a Gang (map+邻接表+DFS)
- PAT_1034: Head of a Gang
- 九度题目1446:Head of a Gang 2012年浙江大学计算机及软件工程研究生机试真题
- 九度OJ 1446 Head of a Gang -- 并查集
- 2012年浙大:Head of a Gang
- 题目1446:Head of a Gang(并查集操作)