poj 3281 最大流建图
题目链接:http://poj.org/problem?id=3281
- #include <cstdio>
- #include <cmath>
- #include <algorithm>
- #include <iostream>
- #include <cstring>
- #include <queue>
- #include <vector>
- #define maxn 105
- #define maxe 20000
- using namespace std;
- const int INF = 0x3f3f3f;
- struct Edge{
- int u,v,flow,cap;
- int next;
- Edge(int u=,int v=,int flow=,int cap=,int next=):
- u(u),v(v),flow(flow),cap(cap),next(next) { }
- };
- struct Dinic{
- int s,t;
- int d[maxn];
- int cur[maxn];
- bool vis[maxn];
- Edge edges[maxe];
- int head[maxn],cnt;
- void init(){
- memset(head,-,sizeof(head));
- cnt = ;
- }
- void addedge(int u,int v,int cap){
- edges[cnt] = Edge(u,v,,cap,head[u]);
- head[u] = cnt++;
- edges[cnt] = Edge(v,u,,,head[v]);
- head[v] = cnt++;
- }
- bool bfs(){
- memset(vis,,sizeof(vis));
- queue<int> Q;
- Q.push(s);
- vis[s] = true;
- d[s] = ;
- while(!Q.empty()){
- int u = Q.front(); Q.pop();
- for(int i=head[u];i!=-;i=edges[i].next){
- Edge& e = edges[i];
- if(!vis[e.v] && e.cap > e.flow){
- vis[e.v] = true;
- d[e.v] = d[e.u] + ;
- Q.push(e.v);
- }
- }
- }
- return vis[t];
- }
- int dfs(int u,int res){
- if(u == t || res == ) return res; //res 残流大小;
- int flow = ,f;
- for(int& i=cur[u];i!=-;i=edges[i].next){
- Edge& e = edges[i];
- if(d[e.v] == d[e.u] + && (f = dfs(e.v,min(res,e.cap-e.flow))) > ){
- e.flow += f;
- edges[i^].flow -= f;
- flow += f;
- res -= f;
- if(res == ) break;
- }
- }
- return flow;
- }
- int MaxFlow(int s_,int t_){
- s = s_; t = t_;
- int flow = ;
- while(bfs()){
- for(int i=s;i<=t;i++) cur[i] = head[i];
- flow += dfs(s,INF);
- }
- return flow;
- }
- }solver;
- int main()
- {
- //freopen("E:\\acm\\input.txt","r",stdin);
- solver.init();
- int N,F,D;
- cin>>N>>F>>D;
- int s = , t = F+*N+D+;
- for(int i=;i<=F;i++) solver.addedge(s,i,);
- for(int i=;i<=N;i++) solver.addedge(F+i,F+N+i,);
- for(int i=;i<=D;i++) solver.addedge(F+*N+i,t,);
- for(int i=;i<=N;i++){
- int food,drink,temp;
- cin>>food>>drink;
- for(int j=;j<=food;j++){
- cin>>temp;
- solver.addedge(temp,F+i,);
- }
- for(int j=;j<=drink;j++){
- cin>>temp;
- solver.addedge(F+N+i,F+*N+temp,);
- }
- }
- printf("%d\n",solver.MaxFlow(s,t));
- }
poj 3281 最大流建图的更多相关文章
- poj 3281 最大流+建图
很巧妙的思想 转自:http://www.cnblogs.com/kuangbin/archive/2012/08/21/2649850.html 本题能够想到用最大流做,那真的是太绝了.建模的方法很 ...
- [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 ...
随机推荐
- 最简单的基于FFmpeg的推流器(以推送RTMP为例)
===================================================== 最简单的基于FFmpeg的推流器系列文章列表: <最简单的基于FFmpeg的推流器(以 ...
- JAVA 环境变量
Java是由Sun公司开发的一种应用于分布式网络环境的程序设计语言,Java语言拥有跨平台的特性,它编译的程序能够运行在多种操作系统平台上,可以实现“一次编写,到处运行”的强大功能. 工具/原料 JD ...
- 【BZOJ3110】【整体二分+树状数组区间修改/线段树】K大数查询
Description 有N个位置,M个操作.操作有两种,每次操作如果是1 a b c的形式表示在第a个位置到第b个位置,每个位置加入一个数c 如果是2 a b c形式,表示询问从第a个位置到第b个位 ...
- Qt Creator编译问题
有时候需要自己编译Qt Creator,需要注意的就是qmake版本的问题,比如我用4.8.1和4.8.6同样编译出来的Qt Creator在同样的qtconfig-qt4下所呈现的效果是不一样的. ...
- Spring(一)简述(转载)
原文出自:http://www.cnblogs.com/liunanjava/p/4396794.html 一.Spring简述 Spring是一个开源框架,Spring是于2003 年兴起的一个轻量 ...
- 总结几种C#窗体间通讯的处理方法
摘要:本文介绍了C#窗体间通讯的几种处理方法,即传值.继承.事件回调,希望对大家有用. http://www.cnblogs.com/jara/p/3439603.html 应用程序开发中,经常需要多 ...
- Library:python-memcached on Windows
1 install memcached 1.4.4 Windows 32-bit 2 cd into the base file and type memcached.exe -d install ...
- Mosquitto-MQTT
安装Mosquitto #To use the new repository you should first import the repository package signing key: w ...
- 转:windows下使用gvim搭建简单的IDE编译环境(支持C/C++/Python等)
原文来自于:http://www.cnblogs.com/zhuyp1015/archive/2012/06/16/2552269.html 使用gvim在windows环境下搭建简单的IDE环境可以 ...
- 转: 静态模式makefile中$(cobjs): $(obj)/%.o: $(src)/%.c
4.12 静态模式静态模式规则是这样一个规则:规则存在多个目标,并且不同的目标可以根据目标文件的名字来自动构造出依赖文件.静态模式规则比多目标规则更通用,它不需要多个目标具有相同的依赖.但是静态模式规 ...