有一些饮料和食物,每种一个,每个客人喜欢一些饮料和一些食物,每个客人可以选择一种饮料和一种食物,问最多能够同时满足多少个客人同时拥有饮料和食物。

这样的,源点连接饮料,汇点连接食物,中间人分别连接饮料和食物。

然后这样直接跑最大流。。。。。是错的。

因为没有保证每个人只拿一种饮料和一种食物。

还需要对每个人拆点,保证每人所拥有的饮料和食物都不超过1,最终最大流就是最多能够满足条件的人数了。

召唤代码君:

#include <iostream>
#include <cstdio>
#include <cstring>
#define maxn 5550
#define maxm 555550
using namespace std; int to[maxm],next[maxm],c[maxm],first[maxn],edge;
int d[maxn],tag[maxn],TAG=;
int Q[maxn],bot,top;
bool can[maxn];
int N,F,D,s,t,ans; void _init()
{
s=,t=N+N+F+D+,edge=-;
for (int i=s; i<=t; i++) first[i]=-;
} void addedge(int U,int V)
{
edge++;
to[edge]=V,c[edge]=,next[edge]=first[U],first[U]=edge;
edge++;
to[edge]=U,c[edge]=,next[edge]=first[V],first[V]=edge;
} void _input()
{
for (int i=; i<=N; i++) addedge(F+i,F+N+D+i);
for (int i=; i<=F; i++) addedge(s,i);
for (int i=; i<=D; i++) addedge(F+N+i,t);
int food,drink,tmp;
for (int i=; i<=N; i++)
{
scanf("%d%d",&food,&drink);
while (food--)
{
scanf("%d",&tmp);
addedge(tmp,F+i);
}
while (drink--)
{
scanf("%d",&tmp);
addedge(F+N+D+i,F+N+tmp);
}
}
} bool bfs()
{
Q[bot=top=]=t,d[t]=,tag[t]=++TAG,can[t]=false;
while (bot<=top)
{
int cur=Q[bot++];
for (int i=first[cur]; i!=-; i=next[i])
if (c[i^]> && tag[to[i]]!=TAG)
{
tag[to[i]]=TAG,d[to[i]]=d[cur]+;
can[to[i]]=false,Q[++top]=to[i];
if (to[i]==s) return true;
}
}
return false;
} int dfs(int cur,int num)
{
if (cur==t) return num;
int tmp=num,k;
for (int i=first[cur]; i!=-; i=next[i])
if (c[i]> && tag[to[i]]==TAG && d[to[i]]==d[cur]- && !can[to[i]])
{
k=dfs(to[i],min(num,c[i]));
if (k) num-=k,c[i]-=k,c[i^]+=k;
if (num==) break;
}
if (num) can[cur]=true;
return tmp-num;
} int main()
{
while (scanf("%d%d%d",&N,&F,&D)!=EOF)
{
_init();
_input();
for (ans=; bfs(); ) ans+=dfs(s,);
printf("%d\n",ans);
}
return ;
}

POJ3281_Dining的更多相关文章

随机推荐

  1. 【轮子狂魔】WeChatAPI 开源系统架构详解

    如果使用WeChatAPI,它扮演着什么样的角色? 从图中我们可以看到主要分为3个部分: 1.业务系统 2.WeChatAPI: WeChatWebAPI,主要是接收微信服务器请求: WeChatAP ...

  2. javaweb学习2——HTTP协议

    声明:本文只是自学过程中,记录自己不会的知识点的摘要,如果想详细学习JavaWeb,请到孤傲苍狼博客学习,JavaWeb学习点此跳转 本文链接:https://www.cnblogs.com/xdp- ...

  3. 使用云负载时将http的请求转发至https时报错:“ERR_TOO_MANY_REDIRECTS”!

    问题描述: 新业务正式环境部署,使用云负载(有http监听也有https监听)在我向我的 Web 服务器添加重定向逻辑后,我的网站停止工作,并且我收到错误 ERR_TOO_MANY_REDIRECTS ...

  4. log4cpp简单使用及踩到的坑

    log4cpp是log4j的一个扩展, C++开发者可用该库记录日志,可输出到终端,亦可保存到文件. 下面简单demo展示如何输出日志到输出终端. #include <iostream> ...

  5. k8s环境搭建--基于minik8s方法

    minik8s 安装 关闭selinux.开启ipv6 sudo bash selinux_ipv6.sh 下载kubectl和minikube 下载minikube,因为国外的源被墙了,所以只能用阿 ...

  6. Excel VBA宏 链接服务器 上传和下载数据

    首先说明以下. 第一: 下面的 “ _" 也就是 空格下划线 在VBA中表示换行的意思:& 表示链接连个字符串的操作,注意 & 的前后是否需要空格 第二: 如果链接服务器,服 ...

  7. 元素transform: rotate()之后,元素宽高该怎么计算?

    通常,利用transform: rotate()元素之后,我们并不会去在意元素大小的变化,因为看上去并没有什么变化.虽然看上去没有变化,其实是有变化的.下面用一个例子来说明一下. html: < ...

  8. 常用DB2命令

    建库 db2 territory CN on 建库到指定位置 db2 create database OADB on D: using codeset GBK territory CN 列出所有数据库 ...

  9. Notes of Daily Scrum Meeting(11.6 and 11.7)

    Notes of Daily Scrum Meeting(11.6 and 11.7) 因为七号星期五是放假的第一天,好几名队员要么是出去玩,要么是回家了,所以我们讨论之后在七号没有开始代码的编写, ...

  10. python处理xml实例

    """ Author = zyh FileName = read_xml_1.py Time = 18-9-26 下午5:19 """ fr ...