求条
查看原帖
求条
964089
run_away楼主2024/7/30 10:41

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;
}
2024/7/30 10:41
加载中...