pat 1034. Head of a Gang (30)
来源:互联网 发布:双十一淘宝联盟 编辑:程序博客网 时间:2024/05/06 14:25
DFS寻找连通分量
#include<stdio.h>#include<iostream>#include<string>#include<vector>#include<map>#include<algorithm>#define SIZE 2000#define INF 0x7fffffffusing namespace std;int graph[SIZE][SIZE], call[SIZE];bool flag[SIZE];map<string, int> hh;map<int, string> rhh;struct gang{ vector<int>mem; string head; int min,fl;}gg[SIZE];void Search(int num, int n,int s){ for (int i = 0; i < n;i++) if (!flag[i] && graph[s][i]){ flag[i] = true; Search(num, n, i); gg[num].mem.push_back(i); gg[num].min += call[i]; }}int DFS(int n){ int num = 0; for (int i = 0; i < n;i++) if (!flag[i]){ flag[i] = true; Search(num, n,i); gg[num].mem.push_back(i); gg[num].min += call[i]; num++; } return num;}bool cmp(const struct gang &a, const struct gang &b){ if (a.fl == b.fl) return a.head < b.head; else return a.fl < b.fl;}int main(){ freopen("1.in", "r", stdin); int n, limit; scanf("%d%d", &n, &limit); int i,min,ele; char from[4], to[4]; for (i = 0,ele = 0; i < n; i++){ scanf("%s%s%d", from, to,&min); if (hh.find(from) == hh.end()) hh[from] = ele++; if (hh.find(to) == hh.end()) hh[to] = ele++; int s = hh[from], d = hh[to]; graph[s][d] = graph[d][s] = min; call[s] += min; call[d] += min; if (rhh.find(s) == rhh.end()) rhh[s] = from; if (rhh.find(d)==rhh.end()) rhh[d] = to; } int numofgang = DFS(ele); int gang = 0; map<string, int>::iterator k; for (i = 0; i < numofgang; i++){ if (gg[i].mem.size() < 3||gg[i].min/2<=limit){ gg[i].fl = INF; continue; } int max = 0,index = -1; for (int j = 0; j < gg[i].mem.size();j++) if (call[gg[i].mem[j]] > max){ max = call[gg[i].mem[j]]; index = gg[i].mem[j]; } gg[i].head = rhh[index]; gang++; } sort(gg, gg + numofgang, cmp); printf("%d\n", gang); for (i = 0; i < gang; i++) cout << gg[i].head << ' ' << gg[i].mem.size() << endl; return 0;}
0 0
- PAT 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)
- PAT 1034. Head of a Gang (30)
- 【PAT】1034. Head of a Gang (30)
- PAT A 1034. Head of a Gang (30)
- PAT-A-1034. Head of a Gang (30)
- PAT 1034. Head of a Gang
- PAT 1034. Head of a Gang
- PAT 1034. Head of a Gang
- PAT 1034. Head of a Gang
- 【PAT】1034. Head of a Gang
- PAT A1034. Head of a Gang (30)
- pat-a1034. Head of a Gang (30)
- PAT (Advanced) 1034. Head of a Gang (30)
- 【PAT甲级】1034. Head of a Gang (30)
- 1034. Head of a Gang (30) PAT 甲级
- 第一次作业 图解汇编代码以及分析计算机是如何工作的
- 用C++/MFC实现P2P和群聊功能的聊天小软件
- 利用自由门更新sdk的方法
- C++编程思想杂记(15章 多态性和虚函数)
- 关于lua的module函数 传参类型变成table
- pat 1034. Head of a Gang (30)
- cocos2dx + ios + hello cpp + 启动过程
- Thiking in java笔记
- 关于这次考试的总结
- 7个IT生涯值得冒的风险
- Eclipse打JAR包的使用
- 1187 最小年龄的3个职工
- java 反射机制
- Integer 与 int 的区别