简、易-sachinKung

导航

pku1149 PIGS

详解参考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;
}

posted on 2012-09-18 21:24  sachinKung  阅读(118)  评论(0编辑  收藏  举报