题意:

给出猪圈个数 m 和买家人数 n

然后给出m个猪圈的猪的头数..

接下来 n 行..

给出mm a1 a2 .. a(mm) k 例如 2 1 5 3 表示第i+1个用户 有mm(2) 个猪圈的钥匙 就是有第 a1(1) 个和第 a2(5) 个猪圈的钥匙..还想要买得k头猪..

问最多能够卖出多少头..

思路:

其实就是最大流~

唯一有趣的是建图的过程..

/************************************/

建一个超级源点0..超级汇点n+1

以客户作为节点..

超级源点根据第一个拥有猪圈的客户和超级源点连线..容量就是第一个客户累计可以得到多少头猪..

因为第一个打开猪圈的客户可以取得所有的猪..所以超级源点和客户之间的连线容量就表示第一个打开猪圈的人虽能够得到的数量..

然后接下来的每一个人与前一个打开猪圈的人之间连线..容量为INF..因为可以从别的猪圈调猪过来..

然后求得的最大流就是可以卖得的猪的数量..

/**********************************/

Tips:

很喜欢这道题建图的技巧~感觉很有才~~~很聪明~~虽然..可能很基础~

大体就是上面说的了~其中用到了last数组来记录该猪圈上一个拥有钥匙的人~

Code:

View Code

 1 #include <stdio.h>
 2 #include <cstring>
 3 #include <queue>
 4 #include <algorithm>
 5 using namespace std;
 6 #define clr(x) memset(x, 0, sizeof(x))
 7 const int INF = 0x1f1f1f1f;
 8 const int MAXN = 110;
 9
10 int cap[MAXN][MAXN], flow[MAXN][MAXN];
11 int p[MAXN], a[MAXN];
12 int f, n;
13
14 void EK(int s, int t)
15 {
16     queue<int> q;
17     memset(flow, 0, sizeof(flow));
18     memset(a, 0, sizeof(a));
19     memset(p, 0, sizeof(p));
20     f = 0;
21     while(1)
22     {
23         memset(a, 0, sizeof(a));
24         a[s] = INF;
25         q.push(s);
26         while(!q.empty())
27         {
28             int u = q.front();
29             q.pop();
30             for(int v = 0; v <= n+1; ++v)
31             if(!a[v] && cap[u][v] > flow[u][v])
32             {
33                 p[v] = u;
34                 q.push(v);
35                 a[v] = a[u] < cap[u][v] - flow[u][v]? a[u]:cap[u][v] - flow[u][v];
36             }
37         }
38         if(a[t] == 0) break;
39         for(int u = t; u != s; u = p[u])
40         {
41             flow[p[u]][u] += a[t];
42             flow[u][p[u]] -= a[t];
43         }
44         f += a[t];
45     }
46 }
47
48
49 int main()
50 {
51     int i, j, k;
52     int nn, mm;
53     int tmp, m;
54     int s, t;
55     int h[1010];
56     int last[1010];
57
58     while(scanf("%d %d", &mm, &nn) != EOF)
59     {
60         clr(cap);
61         clr(last);
62         s = 0, t = nn+1;
63         n = nn;
64
65         for(i = 1; i <= mm; ++i)
66             scanf("%d", &h[i]);
67
68         for(i = 1; i <= nn; ++i){
69             scanf("%d", &m);
70             for(j = 0; j < m; ++j){
71                 scanf("%d", &tmp);
72                 if(last[tmp] == 0)
73                     cap[s][i] += h[tmp];
74                 else
75                     cap[last[tmp]][i] = INF;
76                 last[tmp] = i;
77             }
78             scanf("%d", &cap[i][t]);
79         }
80
81         EK(s, t);
82         printf("%d\n", f);
83     }
84     return 0;
85 }

转载于:https://www.cnblogs.com/Griselda/archive/2012/08/28/2660976.html

POJ 1149 最大流建图 PIGS相关推荐

  1. Silver Cow Party POJ - 3268(正反建图+dijkstra)

    One cow from each of N farms (1 ≤ N ≤ 1000) conveniently numbered 1-N is going to attend the big cow ...

  2. Codeforces 362E Petya and Pipes 费用流建图

    题意: 给一个网络中某些边增加容量,增加的总和最大为K,使得最大流最大. 费用流:在某条边增加单位流量的费用. 那么就可以2个点之间建2条边,第一条给定边(u,v,x,0)这条边费用为0 同时另一条边 ...

  3. BZOJ4205卡牌配对——最大流+建图优化

    题目描述 现在有一种卡牌游戏,每张卡牌上有三个属性值:A,B,C.把卡牌分为X,Y两类,分别有n1,n2张. 两张卡牌能够配对,当且仅当,存在至多一项属性值使得两张卡牌该项属性值互质,且两张卡牌类别不 ...

  4. 洛谷 P2071 座位安排 (最大流 + 建图)

    2020.7.15 今天先开个小差,这图书馆接近零下的气温给爷冻傻了,这还咋写题?马上回去了,练一练网络和tarjan吧. 这道题很简单,问有2n个人,n排座位,每个人都有喜欢的两个座位,最多能安置多 ...

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

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

  6. hdu4411 经典费用里建图

    题意:       给以一个无向图,0 - n,警察在0,他们有k个警队,要派一些警队去1--n个城市抓小偷, 问所有吧所有小偷全抓到然后在返回0的最小路径和是多少,当地i个城市被攻击的时候他会通知i ...

  7. POJ 1149 PIGS 最大流建模

    点击打开链接 PIGS Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 14204   Accepted: 6305 Desc ...

  8. poj 1149 PIGS【最大流】

    建图:s向所有猪圈的第一个顾客连流量为这个猪圈里住的数量,然后对于之后每个来这个猪圈的顾客,由他前一个顾客向他连边权为无穷的边,然后每个顾客向t连流量为这个顾客购买上限的边.然后跑最大流 #inclu ...

  9. POJ 2516 -- Minimum Cost (最小费用最大流, 必须分开建图)

    题目链接 Description Dearboy, a goods victualer, now comes to a big problem, and he needs your help. In ...

最新文章

  1. 类和对象—对象特性—函数的分类和调用
  2. Day01-图像处理原理与深度学习入门
  3. 对比DFT程序与FFT程序的效率
  4. 大数据项目开发案例_大数据分析技术——项目案例1(猫眼电影数据分析上)...
  5. Python 获取本机或者服务器的 IP 地址
  6. leetcode-search-in-rotated-sorted-array
  7. Android10弹出截屏对话框,Android一个美丽而聪明的警告对话框SweetAlert
  8. MyBatis接口代理
  9. 一步步学习微软InfoPath2010和SP2010--第二章节--表单需求:使用决策矩阵(3)--你的SP版本...
  10. 真正优秀的人,都有这3种习惯
  11. numpy基础笔记02
  12. 教你动手做一个 iOS 越狱 app
  13. Pandownload百度网盘不限速下载器PC版|Android版
  14. c语言随机数猜数游戏
  15. 如何制作macOS Big Sur 系统启动U盘
  16. t430服务器查看raid状态,dell t430 raid1教程
  17. 彻底解决阿里云图床上传图片,图片不显示问题
  18. .md文件转.pdf文件
  19. Oozie-4.1.0-cdh5.5.2 安装部署使用
  20. Realtek 2.5G USB网卡RTL8156B-CG支持免驱简介

热门文章

  1. linux非权限安装bioperl,bioperl的安装
  2. stm32linux区别,STM32MPU和OpenSTLinux你了解多少?
  3. python解图片迷宫生成路径_用Python代码来解图片迷宫的方法整理
  4. linux内核 sin头文件,Linux内核中中断request_irq详解--中断共享问题解决
  5. android文件下载含服务器端,制作http/https文件共享服务器的Android下载管理器
  6. python本地编译器_Python学习札记(0)——Python开发环境搭载及推荐几款Python编译器...
  7. Mysql处理海量数据时的一些优化查询速度方法
  8. leetcode44. 通配符匹配 又是一道没有解释的字符串dp困难题
  9. ubuntu apache配置负载均衡篇(二)
  10. PaperNotes(3)-图像分割-RCNN-FCN-Boxsup