#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define FOR(i,n) for(int i=0,_n=n;i<_n;i++) #define FORR(i,s,n) for(int i=s,_n=n;i<_n;i++) #define mp make_pair #define pb push_back #define pii pair #define pli pair #define vi vector #define fs first #define sec second #define maxn 1000 using namespace std; typedef long long ll; const ll INF=4e18L; struct edge{ int a,b; ll c,flow; }; int n,s,t;//number, source, sink int d[maxn]; int ptr[maxn]; int q[maxn]; vector e; vector graf[maxn]; void add_edge(int a, int b, ll c){ edge e1 = {a,b,c,0}; edge e2 = {b,a,0,0}; graf[a].pb((int)e.size()); e.pb(e1); graf[b].pb((int)e.size()); e.pb(e2); } bool bfs(){ int qh=0,qt=0; q[qt++]=s; memset(d,-1,n*sizeof(d[0])); d[s]=0; while(qhcake_prices[i])continue; add_edge(s,1+i, cake_prices[i]-cost); total_profit+=cake_prices[i]-cost; } FOR(i,nc){ int n_tools=0; scanf("%d",&n_tools); FOR(j,n_tools){ int tool_id; scanf("%d",&tool_id); //1-based indexing add_edge(i+1,tool_id+nc, INF); } } printf("%lld\n",total_profit-dinic()); return 0; }