最大权闭合子图

来源:互联网 发布:ps做淘宝宝贝详情教程 编辑:程序博客网 时间:2024/06/11 14:02

以前打过的,但是忘了,在GDKOI没想出来。
有一个有向图,点权可以为正也可以为负。选一个点集,如果点中所有的点连接的边都出现在这个点集中,那就中闭合图。如果点权和最大就是最大权闭合子图

建图

s连向正权,负权连向t(绝对值),然后中间正常连边(如果i依赖j,那么就是i连向j)。

求解

在图中求一遍最小割,然后用正权和减去最小割就是最大权闭合子图。

证明

网络流一般都很难证明,我们感性的证一下。
如果u依赖v,所以要同时选或不选
当u为正,v为负时,假如只选了u,明显两个都要选,就是没割掉s到u的边,v到t的边,所以s到t相通,不符合最小割定义。
当u为负,v为正时,假如只选了u,明显两个都要选,就是割掉u到t的边,s到v的边,割这两条边就是s与t不连通,但是不割这两条边也不连通,但是不符合割量最小,所以不符合。
等等……
由于这些都是不属于最小割,所以要用正权和减去最小割就是最大权闭合子图

模板题:【GDKOI2006】破解密文

#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<cmath>#define fo(i,a,b) for(i=a;i<=b;i++)using namespace std;const int maxn=505*505;int i,j,k,l,t,n,m,ans,a[maxn];int num,first[maxn],next[maxn],last[maxn],chang[maxn],fan[maxn];int d[maxn],data[maxn];void add(int x,int y,int z){    last[++num]=y;    next[num]=first[x];    first[x]=num;    chang[num]=z;    fan[num]=num+1;    last[++num]=x;    next[num]=first[y];    first[y]=num;    chang[num]=0;    fan[num]=num-1;}bool bfs(){    int head=0,tail=1,now,i;    memset(d,0,sizeof(d));    d[0]=1;data[1]=0;    while(head<tail){        now=data[++head];        for(i=first[now];i;i=next[i]){            if(d[last[i]]==0&&chang[i]>0){                d[last[i]]=d[now]+1;                data[++tail]=last[i];            }        }        }    return (d[n+1]!=0);}int dinic(int x,int y){    int i,j=0,k;    if(x==n+1){        return y;    }    for(i=first[x];i;i=next[i]){        if(chang[i]>0&&d[last[i]]==d[x]+1){            k=dinic(last[i],min(chang[i],y));            if(k>0){                chang[i]-=k;                chang[fan[i]]+=k;                y-=k;j+=k;if(y==0)break;            }        }    }    if(j==0)d[x]=-1;    return j;}int main(){    scanf("%d",&n);    fo(i,1,n){        scanf("%d",&a[i]);        if(a[i]>0){            add(0,i,a[i]);ans+=a[i];        }        else if(a[i]<0){            add(i,n+1,-a[i]);        }         scanf("%d",&m);        fo(j,1,m){            scanf("%d",&t);            add(i,t,0x7fffffff);        }    }    while(bfs())ans-=dinic(0,0x7fffffff);    printf("%d\n",ans);}
1 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 万能表没电了怎么办 电视电源板坏了怎么办 手机电路板坏了怎么办 iqos主板坏了怎么办 电脑开关没反应怎么办 电子邮件密码忘了怎么办 微信被限制进群怎么办 电子邮箱密码忘了怎么办 qq邮件收不到怎么办 电子邮件密码忘记了怎么办 孩子一烧就39度怎么办 qq邮箱找不到了怎么办 忘记网易邮箱账号怎么办 企业微信用不了怎么办 qq邮箱密码被盗怎么办 企业邮箱密码忘了怎么办 icloud登入不了怎么办 qq邮件加载失败怎么办 收货数量少了怎么办 邮箱附件过期了怎么办 邮箱附件已过期怎么办 163邮箱附件过大怎么办 126邮箱内容过期怎么办 授权码忘记了怎么办 163邮箱忘记账号怎么办 126邮箱忘记账号怎么办 忘记qq登录密码怎么办 崩坏3死邮怎么办 崩坏3死邮箱怎么办 手机邮箱文件打不开怎么办 户口注销后房产怎么办 公司注销后车辆怎么办 注销后的手机号怎么办 网易邮箱修复失败怎么办 网易邮箱忘记密码怎么办 苹果忘记安全问题答案怎么办 手机被黑客盯上怎么办 qq邮箱被占用怎么办 淘宝邮箱被占用怎么办 LOL出现上载错误怎么办 本科论文格式有些错误怎么办