详解参考http://imlazy.ycool.com/post.2059102.html
规律 1. 如果几个节点的流量的来源完全相同,则可以把它们合并成一个。
规律 2. 如果几个节点的流量的去向完全相同,则可以把它们合并成一个。
规律 3. 如果从点 u 到点 v 有一条容量为 +∞ 的边,并且 u 是 v 的唯一流量来源,或者 v 是 u 的唯一流量去向,则可以把 u 和 v 合并成一个节点。
dinic模板略
int c[maxV];
int used[maxV];
int main(int argc, char** argv) {
int m,n,i,j,k,v,w;
while(scanf("%d%d",&m,&n)!=EOF)
{
init(0,n+1,n+1);
memset(used,0,sizeof(used));
for(i=1;i<=m;i++)
scanf("%d",&c[i]);
for(i=1;i<=n;i++)
{
scanf("%d",&k);
while(k--)
{
scanf("%d",&v);
if(used[v]==0)
{
used[v]=i;
addedge(0,i,c[v]);
}
else
addedge(used[v],i,INF);
}
scanf("%d",&w);
addedge(i,n+1,w);
}
printf("%d\n",dinic());
}
return 0;
}