rt,这份代码在其他oj可以过,但是在uva上面一直wa
#include<bits/stdc++.h>
typedef long long ll;
using namespace std;
const ll mod=1e9+7,maxn=205,maxt=205;
ll n,k,dis[maxn],tot,fa[maxn],f[maxn][maxn],siz[maxn];
unordered_map<string,ll>id;
vector<ll>son[maxn];
string s;
inline void dfs(ll u){
f[u][0]=0,siz[u]=1;
for(auto v:son[u]){
dfs(v);
siz[u]+=siz[v];
for(ll i=n;i>=0;--i){
for(ll j=0;j<=i;++j){
f[u][i]=min(f[u][i],f[u][i-j]+f[v][j]);
}
}
}
f[u][siz[u]]=min(f[u][siz[u]],dis[u]);
}
inline void solve(){
memset(fa,0,sizeof(fa));id.clear();tot=0;
for(ll i=0;i<=n;++i)son[i].clear();
memset(f,0x3f,sizeof(f));
cin.ignore();
for(ll i=1;i<=n;++i){
getline(cin,s);
stringstream scin(s);
scin>>s>>dis[i];
if(!id[s])id[s]=++tot;
string v;
while(scin>>v){
if(!id[v])id[v]=++tot;
son[id[s]].push_back(id[v]);
fa[id[v]]=id[s];
}
}
for(ll i=1;i<=n;++i)if(!fa[i])son[0].push_back(i);
dfs(0);
ll ans=LLONG_MAX;
for(ll i=k;i<=n;++i)ans=min(ans,f[0][i]);
printf("%lld\n",ans);
}
signed main(){
while(cin>>n>>k){
solve();
}
return 0;
}