hdu 6015
sort之后每个相同的字符串加最大的两个到ans上
hdu 6016
枚举每一个中间的边
因为一条符合要求的链要三条边
所以每一条中间的边的两个端点的度减去一再乘
就是以这一条边为中间的边的链数了
也没有重复的问题
hdu 6015
#include<bits/stdc++.h>
using namespace std;
typedef pair<string,int> l;
pair<string,int>lesson[1010];
bool cmp(const l &a, const l &b)
{
if (a.first < b.first)
return true;
else if(a.first==b.first)
{
if(a.second>b.second)
return true;
else return false;
}
else return false;
}
int main()
{
int t;
cin>>t;
while(t--)
{
int n;
cin>>n;
for(int i=0;i<n;i++)
{
cin>>lesson[i].first>>lesson[i].second;
}
sort(lesson,lesson+n,cmp);
int ans=0;
int judge=0;
for(int i=0;i<n;i++)
{
if(i==0)
{
ans+=lesson[i].second;judge++;
}
else
{
if(lesson[i].first==lesson[i-1].first)
{
if(judge<2)
{
ans+=lesson[i].second;
judge++;
}
else continue;
}
else
{
judge=1;
ans+=lesson[i].second;
}
}
}
cout<<ans<<endl;
}
return 0;
}
hdu 6016