poj 3281 最大流+建图
很巧妙的思想
转自:http://www.cnblogs.com/kuangbin/archive/2012/08/21/2649850.html
Sample Input
- 4 3 3
- 2 2 1 2 3 1 //1号牛喜欢2种食物(1,2)2种饮料(3,1)
- 2 2 2 3 1 2
- 2 2 1 3 1 2
- 2 1 1 3 3
Sample Output
- 3
- /*
- POJ 3281 最大流
- //源点-->food-->牛(左)-->牛(右)-->drink-->汇点
- //精髓就在这里,牛拆点,确保一头牛就选一套food和drink的搭配
- */
- #include<stdio.h>
- #include<iostream>
- #include<string.h>
- #include<algorithm>
- #include<queue>
- using namespace std;
- //****************************************************
- //最大流模板
- //初始化:g[][],start,end
- //******************************************************
- const int MAXN=;
- const int INF=0x3fffffff;
- int g[MAXN][MAXN];//存边的容量,没有边的初始化为0
- int path[MAXN],flow[MAXN],start,end;
- int n;//点的个数,编号0-n.n包括了源点和汇点。
- queue<int>q;
- int bfs()
- {
- int i,t;
- while(!q.empty())q.pop();//把清空队列
- memset(path,-,sizeof(path));//每次搜索前都把路径初始化成-1
- path[start]=;
- flow[start]=INF;//源点可以有无穷的流流进
- q.push(start);
- while(!q.empty())
- {
- t=q.front();
- q.pop();
- if(t==end)break;
- //枚举所有的点,如果点的编号起始点有变化可以改这里
- for(i=;i<=n;i++)
- {
- if(i!=start&&path[i]==-&&g[t][i])
- {
- flow[i]=flow[t]<g[t][i]?flow[t]:g[t][i];
- q.push(i);
- path[i]=t;
- }
- }
- }
- if(path[end]==-)return -;//即找不到汇点上去了。找不到增广路径了
- return flow[end];
- }
- int Edmonds_Karp()
- {
- int max_flow=;
- int step,now,pre;
- while((step=bfs())!=-)
- {
- max_flow+=step;
- now=end;
- while(now!=start)
- {
- pre=path[now];
- g[pre][now]-=step;
- g[now][pre]+=step;
- now=pre;
- }
- }
- return max_flow;
- }
- int main()
- {
- int N,F,D;
- while(scanf("%d%d%d",&N,&F,&D)!=EOF)
- {
- memset(g,,sizeof(g));
- n=F+D+*N+;
- start=;
- end=n;
- for(int i=;i<=F;i++)g[][i]=;
- for(int i=F+*N+;i<=F+*N+D;i++)g[i][n]=;
- for(int i=;i<=N;i++)g[F+*i-][F+*i]=;
- int k1,k2;
- int u;
- for(int i=;i<=N;i++)
- {
- scanf("%d%d",&k1,&k2);
- while(k1--)
- {
- scanf("%d",&u);
- g[u][F+*i-]=;
- }
- while(k2--)
- {
- scanf("%d",&u);
- g[F+*i][F+*N+u]=;
- }
- }
- printf("%d\n",Edmonds_Karp());
- }
- return ;
- }
poj 3281 最大流+建图的更多相关文章
- poj 3281 最大流建图
题目链接:http://poj.org/problem?id=3281 #include <cstdio> #include <cmath> #include <algo ...
- [poj 3281]最大流+建图很巧妙
题目链接:http://poj.org/problem?id=3281 看了kuangbin大佬的思路,还用着kuangbin板子orz http://www.cnblogs.com/kuangb ...
- 图论--网络流--最大流--POJ 3281 Dining (超级源汇+限流建图+拆点建图)
Description Cows are such finicky eaters. Each cow has a preference for certain foods and drinks, an ...
- poj3680 Intervals 区间k覆盖问题 最小费用最大流 建图巧妙
/** 题目:poj3680 Intervals 区间k覆盖问题 最小费用最大流 建图巧妙 链接:http://poj.org/problem?id=3680 题意:给定n个区间,每个区间(ai,bi ...
- hdu4106 区间k覆盖问题(连续m个数,最多选k个数) 最小费用最大流 建图巧妙
/** 题目:hdu4106 区间k覆盖问题(连续m个数,最多选k个数) 最小费用最大流 建图巧妙 链接:http://acm.hdu.edu.cn/showproblem.php?pid=4106 ...
- 图论--网络流--最小割 HDU 2485 Destroying the bus stations(最短路+限流建图)
Problem Description Gabiluso is one of the greatest spies in his country. Now he's trying to complet ...
- poj 3281 Dining 网络流-最大流-建图的题
题意很简单:JOHN是一个农场主养了一些奶牛,神奇的是这些个奶牛有不同的品味,只喜欢吃某些食物,喝某些饮料,傻傻的John做了很多食物和饮料,但她不知道可以最多喂饱多少牛,(喂饱当然是有吃有喝才会饱) ...
- poj 2135 Farm Tour 最小费用最大流建图跑最短路
题目链接 题意:无向图有N(N <= 1000)个节点,M(M <= 10000)条边:从节点1走到节点N再从N走回来,图中不能走同一条边,且图中可能出现重边,问最短距离之和为多少? 思路 ...
- poj 1149 Pigs 网络流-最大流 建图的题目(明天更新)-已更新
题目大意:是有M个猪圈,N个顾客,顾客要买猪,神奇的是顾客有一些猪圈的钥匙而主人MIRKO却没有钥匙,多么神奇?顾客可以在打开的猪圈购买任意数量的猪,只要猪圈里有足够数量的猪.而且当顾客打开猪圈后mi ...
随机推荐
- ios 清理缓存
//拿到要清理的路径,其实就是caches的路径,一般像这种很多地方都会用到的地方真好搞成宏,不过现在苹果不提倡用宏了 //在swift中可以定义成全局的常量 //遍历caches,将内部的文件大小计 ...
- 使用Redis SETNX 命令实现分布式锁
基于setnx和getset http://blog.csdn.net/lihao21/article/details/49104695 使用Redis的 SETNX 命令可以实现分布式锁,下文介绍其 ...
- LinkedBlockingQueue和ConcurrentLinkedQueue详细用法
1.LinkedBlockingQueue<E>:java.util.concurrent API中的解释: public class LinkedBlockingQueue<E&g ...
- Connect the Cities(MST prim)
Connect the Cities Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u ...
- 入侵检测课设之Libnids开发包
Libnids开发包介绍 Libnids是一个用于网络入侵检测开发的专业编程接口,它使用了Libpcap所以它具有捕获数据包的功能.同时,Libnids提供了TCP数据流重组功能,所以对于分析 ...
- 在 OpenGL ES 2.0 上实现视差贴图(Parallax Mapping)
在 OpenGL ES 2.0 上实现视差贴图(Parallax Mapping) 视差贴图 最近一直在研究如何在我的 iPad 2(只支持 OpenGL ES 2.0, 不支持 3.0) 上实现 视 ...
- linux 系统下查看raid信息,以及磁盘信息
有时想知道服务器上有几块磁盘,如果没有做raid,则可以简单使用fdisk -l 就可以看到. 但是做了raid呢,这样就看不出来了.那么如何查看服务器上做了raid? 软件raid:只能通过Lin ...
- object-c面向对象1
---恢复内容开始--- 类,对象,方法,属性. 类是object-c一种重要的数据类型,是组成object-c程序的基本要素.object-c的类声明和实现包括两个部分:接口和实现部分. @inte ...
- HTML页面表单输入框去掉鼠标选中后边框变色的效果
标题说的有些含糊,实在不知道怎么描述了,就简单说一下吧,一个最简单的表单,代码如下,没有任何样式和名字, <!DOCTYPE html> <html> <head> ...
- Simple Chroma Key 0.1.16 图片抠像(vs2003) 无任何插件
学习扣像的最基础代码 (只支持 BMP TGA) simplechromakey.rar