#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <string>
#include<map>
#include <iostream>
using namespace std;
int weight[2000][2000] = { 0 }; //邻接矩阵,保存任意两人之间的权值
map<string, int> stringToInt;
map<int, string> intTostring;
map<string, int> gang;
int ind = 0;//打电话者的编号,最终的值也是打电话的总人数
int vertexWeight[2000] = {0}; //每个顶点的点权
int visited[2000] = { 0 };
int totalWeight[1000];//每个连通集的总边权
int block=0; //一次输入的独立连通集个数
int num[1000] = { 0 };//记录一个连通集中顶点个数
int maxWeightVertex[1000] = {0};//每一个连通集权值最大的顶点的下标
//通过遍历,统计每个连通集的顶点个数、总权值、点权最大的顶点
void dfs(int i) {
visited[i] = 1; //递归体外访问顶点
num[block]++;
if (vertexWeight[maxWeightVertex[block]] < vertexWeight[i])
maxWeightVertex[block] =i;
for (int j = 0; j < ind; j++) {
if (weight[i][j] != 0){
totalWeight[block] += weight[i][j]; //先累加权值再访问结点,可保证在有环的时候每条边也都被访问到
if(visited[j]==0)
dfs(j);
}
}
}
int transform(string str) {
//end()返回map中指向最后一个键的后面一位的迭代器(指针)
//find()返回map中指向某个键的迭代器(指针),如果该键不存在,返回map最后一个键的下一位
if (stringToInt.find(str) == stringToInt.end()) { //用是否等于end来判断是否查找成功
//记录双向对应关系
stringToInt[str] = ind;
intTostring[ind] = str;
return ind++; //先返回,再加1
}
else
return stringToInt[str];
}
int main() {
int n, k;
string str1,str2;
int w;//一次通话的时长
scanf("%d %d",&n,&k);
for (int i = 0; i < n; i++) {
cin >> str1 >> str2 >> w;
//设置名字与序号的对应关系
int index1=transform(str1);
int index2=transform(str2);
//邻接矩阵记录有向图的边权
weight[index1][index2]=w;
//累计每个顶点的点权
vertexWeight[index1] += w;
vertexWeight[index2] += w;
}
//枚举每个顶点,统计连通集的个数和每个连通集的顶点个数、总权值、点权最大的顶点
for (int i = 0; i < ind;i++) { //i为顶点序号
if (visited[i] == 0) {
block++; //连通集个数
//遍历每一个连通集之前,先假设该连通集权值最大的顶点是该连通集第一个被访问的顶点
maxWeightVertex[block] = i;
dfs(i);
}
}
//统计每个帮派的首领名字和成员数
for (int i = 1; i <= block; i++) { //num和totalWeight的下标都是从1开始的
if (num[i] > 2&&totalWeight[i]>k) {
gang[intTostring[maxWeightVertex[i]]] = num[i];
}
}
cout << gang.size() << endl;
map<string, int>::iterator it;
for (it=gang.begin(); it!=gang.end(); it++)
{
cout << it->first << " " << it->second << endl;
}
return 0;
}
1034. Head of a Gang (30)-PAT甲级真题
最新推荐文章于 2024-05-21 23:16:53 发布