#include<vector>
#include<string>
#include<unordered_map>
#include<iostream>
#include<algorithm>
using namespace std;
typedef pair<string,int> psi;//headName cnt
const int N=5e3;
int w[N];//id->所对应的总权重
bool st[N];
string names[N];//id->name
vector<int>keep;//单个连通图里的所有id
vector<int>g[N];//连接图
vector<psi>res;
int sum=0;//单个连通图对应的总权重
int K,n;
void dfs(int x){
if(st[x]) return;
st[x]=true;keep.push_back(x);sum+=w[x];
for(int y:g[x]) dfs(y);
}
int main(){
cin>>n>>K;
unordered_map<string,int>ma;//name->id
string name1,name2;int t,p=0;
for(int i=0;i<n;i++){//初始化
cin>>name1>>name2>>t;
int id1,id2;//获取name对应的id
if(ma.count(name1)==0) id1=p++,ma[name1]=id1,names[id1]=name1;
else id1=ma[name1];
if(ma.count(name2)==0) id2=p++,ma[name2]=id2,names[id2]=name2;
else id2=ma[name2];
g[id1].push_back(id2);
g[id2].push_back(id1);
w[id1]+=t;w[id2]+=t;//增加id的总权重
}
for(auto[_name,id]:ma){
if(st[id]==false){//遍历一个新的连通子图
sum=0;keep.clear();//初始化
dfs(id);
if(sum>K*2&&keep.size()>2){//合法组织
int headId=0,headW=0;
for(int x:keep){//查找头头
if(w[x]>headW) headW=w[x],headId=x;
}
res.push_back({names[headId],keep.size()});//记录对应数据
}
}
}
sort(res.begin(),res.end());
cout<<res.size();
for(auto& [name,cnt]:res) cout<<endl<<name<<" "<<cnt;
return 0;
}
1034 Head of a Gang
最新推荐文章于 2024-11-09 21:51:15 发布