bzoj 1711: [Usaco2007 Open]Dining吃饭 网络流

来源:互联网 发布:淘宝支付宝账号怎么改 编辑:程序博客网 时间:2024/05/17 08:41

一个烂大街的题

题解泛滥

我来蹭点访问量+扩充博客文章


由于我懒得算需要开多大数组

就直接开大点然后就不管了...


代码:

#include<iostream>#include<cstdio>#include<vector>#include<queue>#include<cstring> #define ll long long#define inf 10000001 using namespace std; struct node{    int to,num;}edge[11000]; int n,m1,m2;int pn=1;vector<int>v[11000];int edgenum=0;int d[11000]; void link(int x,int y,int z){    node t;    t.to=y;    t.num=z;    edge[edgenum]=t;    v[x].push_back(edgenum);    edgenum++;    t.to=x;    t.num=0;    edge[edgenum]=t;    v[y].push_back(edgenum);    edgenum++;}  bool bfs(){    memset(d,0,sizeof(d));    d[0]=1;    queue<int>q;    q.push(0);    while(!q.empty()){        int t=q.front();        q.pop();        if(t==n)continue;        for(int i=0; i<v[t].size(); i++){            int x=v[t][i];            int to=edge[x].to;            int num=edge[x].num;            if(num==0 || d[to]!=0)continue;            d[to]=d[t]+1;            q.push(to);        }    }    if(d[pn]!=0)return true;    return false;} ll dfs(int x,int y){    if(x==pn || y==0)return y;    ll sum=0;    for(int i=0; i<v[x].size(); i++){        int j=v[x][i];        int to=edge[j].to;        int num=edge[j].num;        if(num){            if(d[to]!=d[x]+1)continue;            ll k=dfs(to,min(num,y));            y-=k;            sum+=k;            edge[j].num-=k;            edge[j^1].num+=k;            if(y==0)break;        }    }    if(sum==0)d[x]=0;    return sum;} long long ans=0; int main(){    scanf("%d%d%d",&n,&m1,&m2);    for(int i=1; i<=m1; i++){        link(0,i,1);        pn++;    }    pn+=m1+m2;    for(int i=1; i<=n; i++){        link(pn,pn+1,1);        int c1=pn,c2=pn+1;        pn+=2;        int x,y;        scanf("%d%d",&x,&y);        for(int j=0; j<x; j++){            int fo;            scanf("%d",&fo);            link(fo,c1,1);        }        for(int j=0; j<y; j++){            int dr;            scanf("%d",&dr);            link(c2,dr+m1,1);        }    }    for(int i=m1+1; i<=m1+m2; i++){        link(i,pn,1);    }    while(bfs())ans+=dfs(0,inf);    printf("%lld\n",ans);         return 0;}


原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 宝宝误吞李子核怎么办 24个月宝宝不愿意说话怎么办 孩子凉着肚子吐怎么办 教宝宝说话不会说怎么办 2岁宝宝语言退化怎么办 两周宝宝嗓子哑怎么办 幼儿园孩子上课爱说话老师怎么办 一岁宝宝不会爬怎么办 孩子说话不太清楚怎么办 十一个月宝宝不爱吃饭怎么办 14个月宝宝不爱吃饭怎么办 一岁宝宝喜欢哭怎么办 4岁儿童不会说话怎么办 8个月宝宝37.5度怎么办 8个月婴儿37.5度怎么办 5个月宝宝38度怎么办 5个月宝宝发烧怎么办 五个月小孩38度怎么办 宝宝3岁还不会说话 怎么办 两岁宝宝流口水厉害怎么办 两周宝宝不说话怎么办 两岁宝宝说话有点口吃怎么办 一周岁的宝宝脾气不好怎么办 九个月的宝宝脾气不好怎么办 两岁宝宝脾气不好怎么办 2岁宝宝脾气不好怎么办 3岁宝宝脾气不好怎么办 脾气不好吓到宝宝了怎么办 四个月宝宝脾气不好怎么办 5岁说话不清楚该怎么办 小孩快上幼儿园了不怎么说话怎么办 四岁宝宝吐字不清楚怎么办 孕28周胎儿腿短怎么办 b超显示腿短怎么办 2岁多宝宝不愿意说话怎么办 6岁儿童咬字不清怎么办 两岁宝宝爱看电视怎么办 两岁宝宝喜欢看电视怎么办 三岁宝宝说话不清晰怎么办 儿子快四岁了说话不清楚怎么办 儿子快三岁了说话不清楚怎么办