!!以下代码有一个5分测试点没通过!!
用邻接矩阵数组内存太大,必须用vector
#include<iostream>
#include<cstring>
#include<fstream>
using namespace std;
#include<vector>
#define MAX 26*26*26+1
//ifstream fin("cin1.txt");
//#define cin fin
int vst[MAX] = { 0 };
int n, k;
int _time[MAX] = { 0 };
int total_time = 0, elem_cnt = 0;
int head;
int toindex(char temp[])
{
return (temp[0] - 'A') * 26 * 26 + (temp[1] - 'A') * 26 + (temp[2] - 'A');
}
class gang
{
public:
char name[4];
int num;
};
vector<gang> g;
vector<int> adj[MAX];
void dfs(int v)
{
vst[v] = 1;
if (_time[v] > _time[head])
{
head = v;
}
total_time += _time[v];
elem_cnt++;
int size = adj[v].size();
for (int i = 0; i < size; i++)
{
int tmp = adj[v][i];
if (!vst[tmp])
{
dfs(tmp);
}
}
}
int main()
{
cin >> n >> k;
while (n--)
{
char tmp1[4], tmp2[4]; int num;
cin >> tmp1 >> tmp2 >> num;
adj[toindex(tmp1)].push_back(toindex(tmp2));
adj[toindex(tmp2)].push_back(toindex(tmp1));
_time[toindex(tmp1)] += num;
_time[toindex(tmp2)] += num;
}
for (int i = 0; i < MAX; i++)
{
if (!vst[i] && !adj[i].empty())
{
total_time = 0, elem_cnt = 0;
head = i;
dfs(i);
if (total_time>2 * k && elem_cnt > 2)
{
char tmp[4] = "AAA";
tmp[2] = head % 26 + 'A';
head /= 26;
tmp[1] = head % 26 + 'A';
head /= 26;
tmp[0] = head % 26 + 'A';
gang tmp_g;
strcpy(tmp_g.name, tmp);
tmp_g.num = elem_cnt;
g.push_back(tmp_g);
}
}
}
int size = g.size();
cout << size << endl;
for (int i = 0; i < size; i++)
{
cout << g[i].name << " " << g[i].num << endl;
}
}