首页 > 代码库 > PAT 1034. Head of a Gang[bug]
PAT 1034. Head of a Gang[bug]
有一个两分的case出现段错误,真是没救了,估计是要写bfs的形式,可能栈溢出了
#include <cstdio>#include <cstdlib>#include <string>#include <vector>#include <unordered_map>#include <algorithm>using namespace std;int G[1001][1001] = {0};class Man {public: int id; string name; vector<int> adj; bool visited; Man(string &n): name(n), visited(false){}};int get_gid(string &name, unordered_map<string, int>& n2i, int &gid, vector<Man>& mans) { int id = gid; auto iter = n2i.find(name); if (iter == n2i.end()) { n2i.insert(make_pair(name, gid++)); mans.push_back(Man(name)); } else { id = iter->second; } return id;}void dfs(vector<Man>& mans, int curi, int K, int &head, int &max_weight, int &count, int &rtotal) { if (mans[curi].visited) { return; } count++; mans[curi].visited = true; int weight = 0; int len = mans[curi].adj.size(); for (int i=0; i<len; i++) { int r = G[curi][mans[curi].adj[i]]; weight += r; if (mans[mans[curi].adj[i]].visited) { continue; } rtotal += r; } if (weight > max_weight) { head = curi; max_weight = weight; } for (int i=0; i<len; i++) { int r = G[curi][mans[curi].adj[i]]; dfs(mans, mans[curi].adj[i], K, head, max_weight, count, rtotal); }}class MyCmp{private: vector<Man>* mans;public: bool operator()(const pair<int, int>& a, const pair<int, int> &b) { return (*mans)[a.first].name < (*mans)[b.first].name; } MyCmp(vector<Man>* ms) {mans = ms;}};int main() { int N, K; scanf("%d%d", &N, &K); unordered_map<string, int> name2id; vector<Man> mans; int gid = 0; char name1[4]; char name2[4]; int time; int ida, idb; for (int i=0; i<N; i++) { scanf("%s%s%d", name1, name2, &time); string s1(name1); string s2(name2); ida = get_gid(s1, name2id, gid, mans); idb = get_gid(s2, name2id, gid, mans); if (!G[ida][idb]) { mans[ida].adj.push_back(idb); } if (!G[idb][ida]) { mans[idb].adj.push_back(ida); } G[ida][idb] += time; G[idb][ida] += time; } vector<pair<int, int> > heads; int count, head, max_weight, rtotal; for (int i=0; i<gid; i++) { if (mans[i].visited) { continue; } count = 0; max_weight = 0; rtotal = 0; dfs(mans, i, K, head, max_weight, count, rtotal); if (count > 2 && rtotal > K) { heads.push_back(make_pair(head, count)); } } sort(heads.begin(), heads.end(), MyCmp(&mans)); int len = heads.size(); printf("%d\n", len); for (int i=0; i<len; i++) { printf("%s %d\n", mans[heads[i].first].name.c_str(), heads[i].second); } return 0;}
PAT 1034. Head of a Gang[bug]
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。