1034. Head of a Gang (30)
2015-01-06 20:52
295 查看
#include <iostream> #include <cstdio> #include <set> #include <map> using namespace std; #define N (26*26*26) inline int root(int n, int rid[]) { while(rid != n) n = rid ; return n; } inline int id(char str[]) { return (str[0]-'A')*26*26 + (str[1]-'A')*26 + (str[2]-'A'); } int main(int argc, char **argv) { int rid ; int count = {}; int pct = {}; int gct = {}; for(int i = 0; i < N; i ++) rid[i] = i; int n, k; cin >> n >> k; for(int i = 0; i < n; i ++) { char aid[4], bid[4]; int m; scanf("%s%s%d", aid, bid, &m); int a = id(aid); int b = id(bid); int call1 = (a << 16) | b; int call2 = (b << 16) | a; int ra = root(a, rid); int rb = root(b, rid); if(ra == a && !pct[a]) { count[ra] ++; } if(rb == b && !pct[b]) { count[rb] ++; } pct[a] += m; pct[b] += m; int rr = ra; if(ra != rb) { if(count[ra] > count[rb]) { count[ra] += count[rb]; gct[ra] += gct[rb]; rid[rb] = ra; rr = ra; } else { count[rb] += count[ra]; gct[rb] += gct[ra]; rid[ra] = rb; rr = rb; } } gct[rr] += m; } map<int, int> gang; for(int i = 0; i < N; i ++) { int r = root(i, rid); if(count[r] > 2 && gct[r] > k) { map<int, int>::iterator it = gang.find(r); if(it != gang.end()) { int old = it->second; if(pct[old] < pct[i]) it->second = i; } else gang[r] = i; } } set<int> head; for(map<int, int>::iterator it = gang.begin(); it != gang.end(); it ++) head.insert(it->second); cout << head.size() << endl; for(set<int>::iterator it = head.begin(); it != head.end(); it ++) { int id = *it; putchar(id/26/26 + 'A'); putchar(id/26%26 + 'A'); putchar(id%26 + 'A'); putchar(' '); printf("%d\n", count[root(id, rid)]); } return 0; }
相关文章推荐
- 1034. Head of a Gang (30)
- PAT甲级 1034. Head of a Gang (30)
- PAT 1034. Head of a Gang (30) 并查集
- PAT 1034. Head of a Gang(30)
- 1034. Head of a Gang (30) -string离散化 -map应用 -并查集
- 【PAT】1034. Head of a Gang (30)
- PAT甲级1034. Head of a Gang (30)
- PAT-A-1034. Head of a Gang (30)
- 【PAT】【Advanced Level】1034. Head of a Gang (30)
- PAT - 甲级 - 1034. Head of a Gang (30)(DFS求连通块)
- 1034. Head of a Gang (30)
- Python实现Pat 1034. Head of a Gang (30)
- PAT (Advanced) 1034. Head of a Gang (30)
- 1034. Head of a Gang (30)
- 1034. Head of a Gang (30) (并查集 或者 DFS)
- 1034. Head of a Gang (30)
- PAT 1034. Head of a Gang (30)
- pat 1034. Head of a Gang (30)
- 1034. Head of a Gang (30)
- 1034. Head of a Gang (30)