题意:

f个食物,d杯饮料,每个牛都有想吃的食物和想喝的饮料,但食物和饮料每个只有一份 求最多能满足多少头牛。。。。

解析:

一道简单的无源汇拆点最大流   无源汇的一个最大流,先建立超级源s和超级汇t, 把s和食物连接 权值为食物的数量1  ,饮料和t连接  权值为饮料的数量1, 因为牛只要一个就好,所以牛的结点容量为1  把牛拆成u和u’ 中间权值为1,  牛和喜欢的食物、饮料分别建边  权值为INF和1都行

这道题和hdu4292 很相似 传送门:https://www.cnblogs.com/WTSRUVF/p/9202751.html

代码如下:

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <queue>
#define mem(a,b) memset(a, b, sizeof(a))
using namespace std;
const int maxn = 100100, INF = 0x7fffffff;
int head[maxn], d[maxn], cur[maxn];
int n, m, s, t, F, D;
int cnt;
typedef long long LL;
struct node{int u, v, c, next;
}Node[maxn*2];void add_(int u, int v, int c)
{Node[cnt].u = u;Node[cnt].v = v;Node[cnt].c = c;Node[cnt].next = head[u];head[u] = cnt++;
}void add(int u, int v, int c)
{add_(u, v, c);add_(v, u, 0);
}bool bfs()
{queue<int> Q;mem(d, 0);Q.push(s);d[s] = 1;while(!Q.empty()){int u = Q.front(); Q.pop();for(int i=head[u]; i!=-1; i=Node[i].next){node e = Node[i];if(!d[e.v] && e.c > 0){d[e.v] = d[e.u] + 1;Q.push(e.v);//        cout<< e.v << "  " << t <<endl;if(e.v == t) return 1;}}}return d[t] != 0;
}int dfs(int u, int cap)
{if(u == t || cap == 0)return cap;int ret = 0;for(int &i=cur[u]; i!=-1; i=Node[i].next){node e = Node[i];if(d[e.v] == d[e.u] + 1 && e.c > 0){int V = dfs(e.v, min(cap, e.c));Node[i].c -= V;Node[i^1].c += V;cap -= V;ret += V;if(cap == 0) break;}}return ret;
}int dinic()
{int ans = 0;while(bfs()){//   cout<< 2111 <<endl;memcpy(cur, head, sizeof(head));ans += dfs(s, INF);//   cout<< ans <<endl;
    }return ans;
}int main()
{cnt = 0;mem(head, -1);cin>> n >> F >> D;s = 0, t = F + D + n + n + 1;for(int i=1; i<=F; i++)add(s, i, 1);for(int i=1; i<=D; i++)add(F+i, t, 1);for(int i=1; i<=n; i++)add(F+D+i, F+D+n+i, 1);for(int i=1; i<=n; i++){int r, l;cin>> r >> l;for(int j=0; j<r; j++){int u;cin>> u;add(u, F+D+i, INF);}for(int j=1; j<=l; j++){int v;cin>> v;add(F+D+n+i, F+v, INF);}}cout<< dinic() <<endl;return 0;
}

转载于:https://www.cnblogs.com/WTSRUVF/p/9221009.html

Dining POJ - 3281相关推荐

  1. B - Dining POJ - 3281 -网络流拆点模板

    B - Dining POJ - 3281 题意:一些牛,每只牛有 一些  想吃的food and milk,然后问最大能够满足多少只牛. 满足是指的这头牛即能吃到他喜欢吃的又能喝到他喜欢喝的 思路: ...

  2. Dining POJ - 3281 (网络流)

    传送门 题意:农夫约翰为他的N头牛准备了F种食物和D种饮料.每头牛都有各自喜欢的食物和饮料,而每种食物或饮料只能分配给一头牛.最多能有多少头牛同时得到自己喜欢的食物和饮料? 题解:如果只是分配食物的话 ...

  3. POJ.3281 dining 最大流+拆点

    POJ.3281 dining 最大流+拆点 思路清晰为啥一直WA呢 #include <iostream> #include <cstring> #include <v ...

  4. 解题报告:POJ 3281 Dining(最大流 / “三分图”建图)

    B.POJ 3281 DiningDiningDining(最大流/建图模板)[省选/NOI- ] 有 F 种食物和 D 种饮料,每种食物或饮料只能供一头牛享用,且每头牛只享用一 种食物和一种饮料.现 ...

  5. Poj 3281 Regional Chengdu Food(Dicnic)

    网络流最大流的优化算法Dicnic,每一步对原图进行分层,然后用DFS求增广路.时间复杂度是O(n^2*m) . Poj 3281 和 9.16号成都regional网络赛food那道题,都是很好的模 ...

  6. poj 3281 Dining 最大流

    题目链接 一开始的想法就是food-cow-water,但是wa了,看了别人的思路知道每一只牛牛用一条边隔开,然后就达到了限流的效果. 所以 食物-->牛牛---->牛牛---->w ...

  7. POJ 3281 -- Dining(最大流,拆点建图)

    题目链接 Description Cows are such finicky eaters. Each cow has a preference for certain foods and drink ...

  8. POJ - 3281 Dining(最大流+思维建边)

    题目链接:点击查看 题目大意:给出n头奶牛,f种食物,d种饮料,每只奶牛可以选择数种食物和饮料,但每种食物和饮料只有一份,现在问最多能让多少头奶牛同时满足食物和饮料的条件 题目分析:最大流的题目,不过 ...

  9. 【POJ - 3281】Dining(拆点建图,网络流最大流)

    题干: Cows are such finicky eaters. Each cow has a preference for certain foods and drinks, and she wi ...

最新文章

  1. 人类基因测序被重新定义,时间减半创世界纪录
  2. 打开Eclipse时出现Failed to create the Java Virtual Machine
  3. 【读书笔记《Android游戏编程之从零开始》】6.Android 游戏开发常用的系统控件(TabHost、ListView)...
  4. vue+elementUI 添加多个可以全选的多选框
  5. ROS学习笔记四:用C++编写ROS发布与订阅
  6. Spring MVC异常处理 - @ ControllerAdvice,@ ExceptionHandler,HandlerExceptionResolver
  7. 华云网际:虚拟机+廉价服务器 一体机就这么简单
  8. @程序员,解读 5G 中性命攸关的时延! | 技术头条
  9. aver函数C语言怎么用,C语言函数使用
  10. 成功恢复UNIX误删除数据库文件(NODE已被清除)
  11. python 批量提取 mkv 视频文件内嵌 srt 字幕
  12. python数学建模基础(一)——矩阵操作
  13. SIGBUS:BUS_ADRERR for stack access violation in memcpy
  14. 吸拖一体机和扫地机器人哪个好,吸拖一体机值得买吗
  15. 这108道 JavaOOP 面试题 你是不是都会了?
  16. Netty介绍与实战(三)之粘包拆包
  17. 【数学分析】伯努利不等式
  18. 一个简单的网路测试bat脚本
  19. 常用API,基本类型包装类,日期类,异常,集合进阶,IO流,多线程
  20. android布局优化!Android动态换肤实现原理解析,灵魂拷问

热门文章

  1. python filter函数_第九篇:Python中lambda、filter和map函数
  2. mysql随机显示记录_mysql随机提取记录数的方法
  3. 导出mysql数据库表结构文档
  4. java使double保留两位小数
  5. Prometheus和Grafana的监控Linux服务器和MYSQL数据库
  6. log4j的日志级别
  7. Mysql允许root用户远程访问
  8. sublime php错误提示,sublime中检查php语法错误
  9. Juniper CoS 基本配置说明
  10. 组策略之文件夹的重定向