Dining (匹配,最大流)
题目链接
题目大意:奶牛喜欢一些种类的食物和饮料,给n种食物,m种饮料,问最多能喂多少奶牛(每种食物和饮料只能使用一次)
思路:把奶牛,食物,饮料都看做点,为了保证路线合法性,奶牛需要在中间,向2边构图。奶牛需要拆点。
emmmm如果奶牛喜欢三样东西应该怎么构图?
#include <bits/stdc++.h>using namespace std;
const int N = 110*4;
const int M = N*N;
int n,m,s,t,tot;
int head[N];
struct node{int u,nxt,cap,to;
}edge[M<<1];
int cur[N],deep[N];
void ae(int u,int v,int w){tot++;edge[tot].nxt = head[u];edge[tot].to = v;edge[tot].u = u;edge[tot].cap = w;head[u] = tot;
}
bool bfs(){memset(deep,-1,sizeof(deep));queue<int>q;q.push(s);deep[s] = 0;while(!q.empty()){int u = q.front();for(int i = head[u]; ~i;i = edge[i].nxt){int v = edge[i].to;if(deep[v]==-1&&edge[i].cap>0){q.push(v);deep[v] = deep[u]+1;if(v==t) return 1;}}q.pop();}return 0;
}
int dfs(int u,int f){int flow = 0,d;if(u==t||f==0) return f;for(int &i = cur[u]; ~i;i = edge[i].nxt){int v = edge[i].to;if(deep[v]>deep[u]&&edge[i].cap>0&&(d=dfs(v,min(f,edge[i].cap)))){edge[i].cap -= d;edge[i^1].cap += d;f -= d;flow += d;if(!f) break;}}if(flow==0) deep[u] = -1;return flow;
}
int dinic(){int ans = 0;while(bfs()){memcpy(cur, head, sizeof(head));ans += dfs(s,1e9);}return ans;
}
int main()
{//freopen("a.txt","r",stdin);ios::sync_with_stdio(0);int n1,n2,n3;cin>>n2>>n1>>n3;s = 0;t = n1+n2*2+n3+1; memset(head,-1,sizeof(head));tot = -1;int i,j;for(i = 1;i <= n1;i ++){ae(0,i,1); //s连食物ae(i,0,0);}for(i = n1+n2*2+1;i <= n1+n2*2+n3;i ++){ae(i,t,1); //饮料连tae(t,i,0);}for(i = 1;i <= n2;i ++){ae(n1+i,n1+i+n2,1); //奶牛拆点ae(n1+i+n2,n1+i,0);int num1,num2;cin>>num1>>num2;for(j = 1;j <= num1;j ++){int x;cin>>x;ae(x,n1+i,1); //奶牛连食物ae(n1+i,x,0);}for(j = 1;j <= num2;j ++){int x;cin>>x;ae(n1+i+n2,n1+n2*2+x,1); //奶牛连饮料ae(n1+n2*2+x,n1+i+n2,0);}}cout<<dinic();return 0;
}
Dining (匹配,最大流)相关推荐
- 紫书:二分图匹配 最大流解决
网络流的一个经典应用是二分图匹配. 匹配是指:两两没有公共点的边集. 二分图是指:可以把结点集分成两部分X和Y,使得每条边恰好一个端点在XXX,另一个端点在YYY.换句话说,同色节点不相邻,进行二染色 ...
- 解题报告:POJ 3281 Dining(最大流 / “三分图”建图)
B.POJ 3281 DiningDiningDining(最大流/建图模板)[省选/NOI- ] 有 F 种食物和 D 种饮料,每种食物或饮料只能供一头牛享用,且每头牛只享用一 种食物和一种饮料.现 ...
- POJ 3281 -- Dining(最大流,拆点建图)
题目链接 Description Cows are such finicky eaters. Each cow has a preference for certain foods and drink ...
- POJ-3281 Dining 网络流最大流
Dining 题意: 现在有一个养牛场厂主,他有F种食物,D种水,每种都只有一份. 现在他有n头牛,每种牛需要吃一份食物,一种水,对于每头牛来说 食物都有Fi种选项,水有Di种选项,各自都需要选一种. ...
- poj3281 Dining (最大流)
问题描述 牛是很挑食的.每头牛都偏爱特定的食物和饮料,其他的她都不吃. 农夫约翰为他的牛做了美味的饭菜,但他忘了根据它们的喜好检查菜单.虽然他可能不能填饱所有的人,但他想给尽可能多的奶牛提供一顿完整的 ...
- POJ 3281 (最大流+匹配+拆点)
题目链接:http://poj.org/problem?id=3281 题目大意:有一些牛,一堆食物,一堆饮料.一头牛要吃一份食物喝一份饮料才算满足,而且牛对某些食物和饮料才有好感,问最多有多少头牛是 ...
- HDU 3081 Marriage Match II (并查集+二分+最大流 | 并查集+二分图匹配)
题意:n 个男生.n个女生玩游戏,每个女生都可以和她不讨厌的男生结婚,此外她的朋友如果也不讨厌这个男生,也可以和他结婚:对于女生,如果A和B是朋友,B和C是朋友,那么A和C也是朋友.每次游戏女生会找一 ...
- Spring Cloud Gateway 整合阿里 Sentinel网关限流实战!
前一篇文章介绍了Spring Cloud Gateway的一些基础知识点,今天陈某就来唠一唠网关层面如何做限流? 文章目录如下: 网关如何限流? Spring Cloud Gateway本身自带的限流 ...
- 多媒体流信息提取工具 ffprobe 简介
一.介绍 ffprobe [options] [input_url] ffprobe能从多媒体流中收集信息,并且以人和机器都能理解的方式打印出来. [input_url]可以是本地文件的路径或者url ...
- vue.config.js配置不生效_华为QoS流策略配置教程
3.QoS流策略配置 3.1.创建一个流策略并进入流策略视图,或进入已存在的流策略视图 [Huawei]traffic policy 1 match-order ? auto Auto order c ...
最新文章
- Python-pcl 随机采样一致性算法
- Datawhale组队学习:初级算法梳理课程任务
- 用python播放音乐_Python实例讲解 -- 定时播放 (闹钟+音乐)
- ] 解决myeclipse中新建javaweb工程,无法使用Web App Libraries问题
- linux下怎样看设备的中断号,Linux设备驱动的中断处理
- Java Web项目漏洞:检测到目标URL存在http host头攻击漏洞解决办法
- dbf文件怎么创建_DBC文件到底是个啥
- 2015年01月30日 - Git五分钟教程
- 切换进程 切换线程
- 电加热炉温度控制系统的研究与设计
- html文字用竖线隔开,inline+padding技巧:间隔符(分割线)与文字高度不一致,间隔竖线高度缩短方法...
- Linux下为什么目录的大小总是4096
- 濒临死亡的校园BBS
- 【PHP + MySQL】【分享】搭建网站自动回复机器人
- centos卸载nvidia驱动_在Linux系统中卸载手动安装的Nvidia驱动程序
- 新基建专题报告:未来发展方向及重点产业分析
- Python 第一个GUI制作 pyqt6+qtdesigner+vscode
- VMWARE 虚拟机串口管道配置
- Windows Server 2012 R2 分布式文件系统(DFS)-深博-专题视频课程
- 孝心至上自强不息南阳何志强感动济源