zoukankan      html  css  js  c++  java
  • bzoj 1711 Dining吃饭 —— 最大流

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1711

    食物一列,牛拆点,饮料一列。

    代码如下:

    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    #include<queue>
    using namespace std;
    int const xn=405,xm=6e4+5,inf=1e9;
    int n,F,D,S,T,hd[xn],ct=1,nxt[xm],to[xm],c[xm],dis[xn],cur[xn];
    queue<int>q;
    int rd()
    {
      int ret=0,f=1; char ch=getchar();
      while(ch<'0'||ch>'9'){if(ch=='-')f=0; ch=getchar();}
      while(ch>='0'&&ch<='9')ret=ret*10+ch-'0',ch=getchar();
      return f?ret:-ret;
    }
    void ade(int x,int y,int z){to[++ct]=y; nxt[ct]=hd[x]; hd[x]=ct; c[ct]=z;}
    void add(int x,int y,int z){ade(x,y,z); ade(y,x,0);}
    int id(int x,int t)//F,n1,n2,D
    {if(t==0)return x; if(t==1)return F+x; if(t==2)return F+n+x; if(t==3)return F+n+n+x;}
    bool bfs()
    {
      memset(dis,0,sizeof dis);
      dis[S]=1; q.push(S);
      while(q.size())
        {
          int x=q.front(); q.pop();
          for(int i=hd[x],u;i;i=nxt[i])
        if(!dis[u=to[i]]&&c[i])dis[u]=dis[x]+1,q.push(u);
        }
      return dis[T];
    }
    int dfs(int x,int fl)
    {
      if(x==T)return fl;
      int ret=0;
      for(int &i=cur[x],u;i;i=nxt[i])
        {
          if(dis[u=to[i]]!=dis[x]+1||!c[i])continue;
          int tmp=dfs(u,min(fl-ret,c[i]));
          if(!tmp)dis[u]=0;
          c[i]-=tmp; c[i^1]+=tmp;
          ret+=tmp; if(ret==fl)break;
        }
      return ret;
    }
    int main()
    {
      n=rd(),F=rd(),D=rd(); S=0; T=(n<<1)+F+D+1;
      for(int i=1;i<=F;i++)add(S,id(i,0),1);
      for(int i=1;i<=D;i++)add(id(i,3),T,1);
      for(int i=1;i<=n;i++)add(id(i,1),id(i,2),1);
      for(int i=1,f,d,x;i<=n;i++)
        {
          f=rd(); d=rd();
          for(int j=1;j<=f;j++)x=rd(),add(id(x,0),id(i,1),1);
          for(int j=1;j<=d;j++)x=rd(),add(id(i,2),id(x,3),1);
        }
      int ans=0;
      while(bfs())
        {
          memcpy(cur,hd,sizeof hd);
          ans+=dfs(S,inf);
        }
      printf("%d
    ",ans);
      return 0;
    }
  • 相关阅读:
    IntelliJ IDEA Java编译打包
    java 播放mp3文件
    cool edit录音声卡
    VB调用VB脚本VBS向Http请求的三种方式
    asp.net 各种下载方式汇总
    Action拦截器接口-- IActionFilter,IExceptionFilter, IResultFilter
    Centos 常用命令
    医院信息集成平台ESB技术框架
    【划重点】医疗软件行业关键概念扫盲
    互联网医院安全架构
  • 原文地址:https://www.cnblogs.com/Zinn/p/10126281.html
Copyright © 2011-2022 走看看