目录

  • A.POJ 3436 ACMComputerFactoryACM\ Computer\ FactoryACM Computer Factory【省选/NOI- 】
  • B.POJ 3281 DiningDiningDining(最大流/建图模板)【省选/NOI- 】

网络流建图汇总

A.POJ 3436 ACMComputerFactoryACM\ Computer\ FactoryACM Computer Factory【省选/NOI- 】

B.POJ 3281 DiningDiningDining(最大流/建图模板)【省选/NOI- 】

【题目大意】
有 F 种食物和 D 种饮料,每种食物或饮料只能供一头牛享用,且每头牛只享用一 种食物和一种饮料。现在有 N 头牛,每头牛都有自己喜欢的食物种类列表和饮 料种类列表,问最多能使几头牛同时享用到自己喜欢的食物和饮料。( 1 <= F <= 100, 1 <= D <= 100, 1 <= N <= 100)

【思路】
以往一般都是左边一个点集表示供应并与源相连, 右边一个点集表示需求并与汇相连(直接二分图)。本题不一样,供应有两种资源,需求仍只有 一个群体。(三分图)

根据这个群体与两种资源的联系来看,食物和饮料之间并没有直接联系,而是牛与食物,牛与饮料分别有联系。

可以把牛放在两种资源中间,源点与食物相连,饮料与汇点相连,然后牛在中间食物与牛相连 牛与饮料相连(t->食物->牛->饮料->汇点)
但是会出现一只牛吃多种食物多种饮料的情况所以要把牛拆点拆成(牛,牛’,1)(入点,出点)为了保证只能吃一次,两者之间流量为1。

#include<cstdio>
#include<algorithm>
#include<iostream>
#include<cstring>
#include<queue>
#include<vector>using namespace std;const int N = 2007;
const int M = 100007;
const int INF = 0x3f3f3f3f;
typedef pair<int,int> PII;
int n,m,f,d;
int S,T;//超级源点和超级汇点
int head[N],ver[M],edge[M],nex[M],tot = 1;
int maxflow;
int deep[N];
int now[M];
queue<int>q;void add(int x,int y,int z){ver[++tot] = y;edge[tot] = z;nex[tot] = head[x];head[x] = tot;ver[++tot] = x;edge[tot] = 0;nex[tot] = head[y];head[y] = tot;
}
inline bool bfs(){//在残量网络中构造分层图for(int i = 1;i <= n + T;++i)deep[i] = INF;while(!q.empty())q.pop();q.push(S);deep[S] = 0;now[S] = head[S];//一些初始化while(!q.empty()){int x = q.front();q.pop();for(int i = head[x];i;i = nex[i]){int y = ver[i];if(edge[i] > 0 && deep[y] == INF){//没走过且剩余容量大于0q.push(y);now[y] = head[y];//先初始化,暂时都一样deep[y] = deep[x] + 1;if(y == T)return 1;//找到了}}}return 0;
}//flow是整条增广路对最大流的贡献,rest是当前最小剩余容量,用rest去更新flow
int dfs(int x,int flow){//在当前分层图上增广if(x == T)return flow;int ans = 0,k,i;for(i = now[x];i && flow;i = nex[i]){now[x] = i;//当前弧优化(避免重复遍历从x出发的不可拓展的边)int y = ver[i];if(edge[i] > 0 && (deep[y] == deep[x] + 1)){//必须是下一层并且剩余容量大于0k = dfs(y,min(flow,edge[i]));//取最小if(!k)deep[y] = INF;//剪枝,去掉增广完毕的点edge[i] -= k;//回溯时更新edge[i ^ 1] += k;//成对变换ans += k;flow -= k;}//if(!flow)return rest;}return ans;
}void dinic(){while(bfs())maxflow += dfs(S,INF);
}int main(){scanf("%d%d%d",&n,&f,&d);S = 1;T = 1 + n + f + d + 1;for(int i = 1;i <= f;++i)//超级源点连每种食物add(S,1 + i,1);for(int i = 1;i <= d;++i)//每种饮料连超级汇点add(1 + f + i + n,T,1);//对于每头牛入点连出点for(int i = 1;i <= n;++i)//跳过汇点之后再来一组add(1 + f + i,1 + f + i + n + d + 1,1);for(int i = 1 ;i <= n;++i){int fn,dn;scanf("%d%d",&fn,&dn);for(int j = 1;j <= fn;++j){//食物连爱吃它的牛int k;scanf("%d",&k);add(1 + k,1 + f + i,1);}for(int j = 1;j <= dn;++j){//奶牛连它爱喝的饮料int k;scanf("%d",&k);add(1 + f + i + 1 + n + d,1 + f + n + k,1);}}dinic();cout<<maxflow<<endl;return 0;
}

待更
POJ 3436 ACM Computer Factory
POJ 3281 Dining
POJ 1087 A Plug for UNIX
POJ 2195 Going Home
POJ 2516 Minimum Cost
POJ 1459 Power Network
HDU 4280 Island Transport
HDU 4292 Food
HDU 4289 Control
UVA 10480 Sabotage
HDU 2732 Leapin’ Lizards
HDU 3338 Kakuro Extension
HDU 3605 Escape
HDU 3081 Marriage Match II
HDU 3416 Marriage Match IV

解题报告:【kuangbin带你飞】专题十一 网络流相关推荐

  1. [kuangbin带你飞]专题十一 网络流\N HDU 3081 Marriage Match II

    题目描述 Presumably, you all have known the question of stable marriage match. A girl will choose a boy; ...

  2. kuangbin带你飞专题合集

    题目列表 [kuangbin带你飞]专题一 简单搜索 [kuangbin带你飞]专题二 搜索进阶 [kuangbin带你飞]专题三 Dancing Links [kuangbin带你飞]专题四 最短路 ...

  3. “kuangbin带你飞”专题计划——专题十四:数论基础

    写在前面 1.目前还没啥写的.开始时间:2021-05-13(其实博客上看得到该博客创建时间的) 2.上一个专题刷的是网络流(博客总结),属于第一次接触.本来想的是一周特别高效,然后一周略划水,结果是 ...

  4. (2021-07-14~)“kuangbin带你飞”专题计划——专题十三:基础计算几何

    目录 前言 参考博客 自己总结的东西: 难度判断? 题目 1.[TOYS POJ - 2318 ](解决) 2.[Toy Storage POJ - 2398 ](解决) 3.[Segments PO ...

  5. kuangbin带你飞 专题1-23 题单

    kuangbin大神,对于打过ACM比赛的ACMer,无人不知无人不晓. 在此,附上vjudge平台上一位大神整理的[kuangbin带你飞]专题目录链接. [kuangbin带你飞专题目录1-23] ...

  6. [kuangbin带你飞]专题十二 基础DP1 题解+总结

    kuangbin带你飞:点击进入新世界 总结: 简单dp,最近在做,持续更新. 文章目录 总结: 1.Max Sum Plus Plus 2.Ignatius and the Princess IV ...

  7. [kuangbin带你飞]专题五 并查集 题解+总结

    kuangbin带你飞:点击进入新世界 总结: 本人算是初学者中的初学者,欢迎交流~ 并查集的接触过的不多,大概只有普通并查集,带权并查集,种族并查集,传说中的可持续化并查集只是听说过还没有接触,不过 ...

  8. [kuangbin带你飞]专题二十一 概率期望 部分题解

    2018-03-08  18:02:20 A - A Dangerous Maze LightOJ - 1027 题意: 小花的迷宫入口有n个门  走每个门的概率都是相同的  每个门有一个值x  x可 ...

  9. [kuangbin带你飞]专题五查并集

    写了几个查并集得题,成功把自己写晕了 之后写下面得题(写不下去了) **poj-2912 poj 文章目录 1.POJ - 1611(模板题) 2.HDU - 1213(模板题) 3.poj2236( ...

  10. [kuangbin带你飞]专题1

    专题一 简单搜索 POJ 1321 棋盘问题 在一个给定形状的棋盘(形状可能是不规则的)上面摆放棋子,棋子没有区别.要求摆放时任意的两个棋子不能放在棋盘中的同一行或者同一列,请编程求解对于给定形状和大 ...

最新文章

  1. python培训比较好的机构-学Python哪个机构好?老男孩Python培训班
  2. NSTimer循环引用的问题
  3. 还在玩爬虫?告诉你如何进行用户画像!别人都数据分析建模了
  4. C# 时间函数(几个常用时间,程序运行计时,页面运行计时)
  5. MySQL分组函数使用的其他注意事项
  6. 【Servlet】Session的特点和使用
  7. 关于之前的函数式编程
  8. 报错The sandbox is not in sync with the Podfile.lock
  9. java jmstemplate_Java JmsTemplate.setReceiveTimeout方法代码示例
  10. 睡觉老往下跑是怎么回事_孩子冬季睡觉“不老实,踢被子”,可不单纯是热,娃的苦衷要了解...
  11. 2022年低压电工考试题及在线模拟考试
  12. 招行权证割肉比赛开演 10个交易日后寿终正寝
  13. windows下安装PHP的swoole拓展
  14. Moss 自定义Featur
  15. 召唤出DirectX诊断工具
  16. 企业防止绿色软件监控
  17. 【vue练手01之点击选中】
  18. windows“IIS”配置
  19. 密码加密之bcrypt
  20. 12V转5V2A电源模块的电路集合

热门文章

  1. 论文笔记 | CNN 是怎么学到图片绝对位置信息的
  2. linux的那些破事
  3. Java 获取当前时间最近12个月(字符串)
  4. 移动磁盘格式化了的资料寻回方法
  5. Spring-Boot快速搭建web项目详细总结
  6. 程序员必备,新手也可以直接拿来用的jQuery万能代码段
  7. SharedPreferences的工具类,使用起来方便、快捷
  8. jquery的页面加载完执行的函数
  9. [Android Traffic] 调整定时更新的频率(C2DM与退避算法)
  10. 习题:八数码难题(双向BFS)