题目地址:http://pat.zju.edu.cn/contests/pat-a-practise/1034
代码如下:
#include <cstdio>
#include <string>
#include <map>
#include <vector>
#include <iostream>
using namespace std;
map<string,vector<string> >adjlist;
map<string,int> weight;
map<string,int> visit;
map<string,int> res;
int cnt,total;
string head;
void dfs(string ss){//可使用bfs改造
++cnt;
total += weight[ss];
visit[ss] = 1;
if(weight[head]<weight[ss])head = ss;
vector<string>::iterator it = adjlist[ss].begin();
for(;it!=adjlist[ss].end();++it){
if(visit[*it]==0){
dfs(*it);
}
}
}
int main(){
int n,k,wei,i;
string sa,sb;
scanf("%d %d",&n,&k);
for(i=0;i<n;++i){
cin>>sa>>sb>>wei;
adjlist[sa].push_back(sb);
adjlist[sb].push_back(sa);
weight[sa] += wei;
weight[sb] += wei;
visit[sa] = 0;
visit[sb] = 0;
}
map<string,int>::iterator it = visit.begin();
for(;it!=visit.end();++it){
if(it->second==0){
head = it->first;
total = 0;
cnt = 0;
dfs(it->first);
if(cnt>2&&total/2>k)res[head] = cnt;
}
}
printf("%d\n",res.size());
it = res.begin();
for(;it!=res.end();++it){
cout<<it->first<<" "<<it->second<<endl;
}
return 0;
}