#include <cstdio>
#include <cstdlib>
#include <math.h>
#include <algorithm>
#include <map>
#include <iostream>
#include <string>
using namespace std;
int num=0,N,th,G[2010][2010]={0},weight[2010]={0},v;
bool vis[1010]={false};
map<string,int> stringtoint;
map<int,string> inttostring;
map<string,int> gang;
void DFS(int nowvis,int& head,int &numM,int&totalv)
{
numM++;
vis[nowvis]=true;
if(weight[nowvis]>weight[head])
{
head=nowvis;
}
for(int i=0;i<num;i++)
{
if(G[nowvis][i]>0)
{
totalv+=G[nowvis][i];
G[nowvis][i]=G[i][nowvis]=0;
if(vis[i]==false)
{
DFS(i,head,numM,totalv);
}
}
}
}
void DFST()
{
for(int i=0;i<num;i++)
{
if(vis[i]==false)
{
int head=i,numM=0,tV=0;
DFS(i,head,numM,tV);
if(numM>2&&tV>th)
{
gang[inttostring[head]]=numM;
}
}
}
}
int main()
{
scanf("%d%d",&N,&th);
for(int i=0;i<N;i++)
{
string s1,s2;
int id1,id2,v;
cin>>s1>>s2>>v;
if(stringtoint.find(s1)==stringtoint.end())
{
id1=num;
stringtoint[s1]=num++;
}
else
{
id1=stringtoint[s1];
}
if(stringtoint.find(s2)==stringtoint.end())
{
id2=num;
stringtoint[s2]=num++;
}
else
{
id2=stringtoint[s2];
}
inttostring[id1]=s1;
inttostring[id2]=s2;
G[id1][id2]+=v;
G[id2][id1]+=v;
weight[id1]+=v;
weight[id2]+=v;
}
DFST();
cout<<gang.size()<<endl;
map<string,int>::iterator it=gang.begin();
for(it==gang.begin();it!=gang.end();it++)
{
cout<<it->first<<" "<<it->second<<endl;
}
system("pause");
return 0;
}
PAT A 1034. Head of a Gang (30)
Guess you like
Origin http://43.154.161.224:23101/article/api/json?id=325517376&siteId=291194637
Recommended
Ranking