提交时间:2025-06-10 16:41:51

运行 ID: 38043

#include<bits/stdc++.h> #define ll long long using namespace std; ll n,a[10005],b[10005],f[10005],scc[10005],dfn[10005],low[10005],dfncnt,sta[10005],top,m; set<ll> s[10005]; vector<ll> G[10005],H[10005]; queue<ll> q; bool vis[10005]; ll z[1005][10005],HH[10005][10005],dp[10005][10005],res[10005],ind[10005]; ll que[10005],front=1,rear=0; bool chkmi(ll &x,ll &y){ if(y<x){ x=y; return 1; }else{ return 0; } } bool chkma(ll &x,ll &y){ if(x<y){ x=y; return 1; }else{ return 0; } } void tarjan(ll u){ dfn[u]=low[u]=++dfncnt; sta[++top]=u; for(auto v:G[u]){ if(!dfn[v]){ tarjan(v); low[u]=min(low[u],low[v]); }else{ if(!scc[v]) low[u]=min(low[u],low[v]); } } if(dfn[u]==low[u]){ ++m; do{ u=sta[top--]; scc[u]=m; }while(dfn[u]!=low[u]); } } int main(){ ios::sync_with_stdio(0); cin>>n; for(ll i=1;i<=n;i++){ cin>>a[i]>>b[i]>>f[i]; for(ll j=1;j<=f[i];j++){ ll tmp; cin>>tmp; G[i].push_back(tmp); } } for(ll i=1;i<=n;i++){ if(!scc[i]) { tarjan(i); } } for(ll i=1;i<=n;i++){ for(auto j:G[i]){ if(scc[i]!=scc[j]){ HH[scc[i]][scc[j]]=1; } } } for(ll i=1;i<=m;i++){ for(ll j=1;j<=m;j++){ if(HH[i][j]){ H[i].push_back(j); ++ind[j]; } } } for(ll i=1;i<=1000;i++){ for(ll j=1;j<=1000;j++){ z[i][j]=1e9; dp[i][j]=1e9; } res[i]=1e9; } for(ll i=1;i<=n;i++){ ll o=scc[i]; vector<ll> al; for(ll j=1;j<=n;j++){ if(i!=j&&scc[j]==o){ al.push_back(a[j]); } } sort(al.begin(),al.end()); ll sum=b[i]; z[o][1]=min(z[o][1],b[i]); for(ll k=0;k<al.size();k++){ chkmi(z[o][k+2],sum+=al[k]); } } for(ll i=1;i<=m;i++){ z[i][0]=0; } for(ll i=1;i<=m;i++){ if(!ind[i]){ que[++rear]=i; for(ll j=0;z[i][j]<1e9;j++){ dp[i][j]=z[i][j]; } } } while(front<=rear){ ll u=que[front++]; for(auto v:H[u]){ --ind[v]; if(!ind[v]){ que[++rear]=v; } for(ll i=0;dp[u][i]<1e9;i++){ for(ll j=0;z[v][j]<1e9;j++){ dp[v][i+j]=min(dp[v][i+j],dp[u][i]+z[v][j]); } } } for(ll i=0;dp[u][i]<1e9;i++){ chkmi(res[i],dp[u][i]); } } for(ll i=1;res[i]<1e9;i++){ printf("%lld\n",res[i]); } return 0; }