题目大意:迈克在农场工作,农场有 m 个猪舍,每个猪舍有若干只猪,但是迈克不能打开任何一间猪舍。有 n 个顾客前来购买,每个顾客有最大的购买数量,每个顾客可以购买某些猪舍的猪,且顾客可以打开这些猪舍,从中挑选猪仔。重要的是,迈克可以在打开的这些猪舍中重新分配猪仔。由于知道每个猪舍的猪仔数目和顾客的购买情况,求迈克可以卖出的最大数目的猪仔。

解题思路:将每个顾客看成一个点,加上源点、汇点。将每个猪舍的第一位客人与源点相连,容量为猪舍中猪仔的数目,将每个猪圈的前以为顾客与后一位顾客相连,容量为INF,将每位顾客与汇点相连,容量为顾客的最大购买量。

代码:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<queue>
using namespace std;
int m,n,f,tag[1001];
queue<int> Q;
struct edge{
int from;
int to;
int flow;
int cap;
};
vector<edge>e;
vector<int>adj[1200]; void init(){
f = 0;
for(int i=0;i<=n+m+1;i++)
adj[i].clear();
} void addedge(int from,int to,int flow,int cap){
e.push_back((edge){from,to,flow,cap});
e.push_back((edge){to,from,flow,0});
int t = e.size();
adj[from].push_back(t - 2);
adj[to].push_back(t - 1);
} void solve(){
int i,j,a[1200],p[1200];
for( ; ; ){
memset(a,0,sizeof(a));
a[0] = 10000000;
while(!Q.empty())
Q.pop();
Q.push(0);
while(!Q.empty()){
int x = Q.front();
Q.pop();
for(i=0;i<adj[x].size();i++){
int t = adj[x][i] ;
int v = e[t].to;
if(!a[v] && e[t].flow < e[t].cap){
a[v] = a[x] < e[t].cap - e[t].flow ? a[x] : e[t].cap - e[t].flow;
Q.push(v);
p[v] = t ;
}
}
} if(!a[n+1])
break;
int u = n+1;
for( ; u != 0; u = e[p[u]].from){
e[p[u]].flow += a[n+1] ;
e[p[u] ^ 1].flow -= a[n+1] ;
}
f += a[n+1] ;
}
} int main(){
int i,j,a,b;
int p[1001],c[1001],x;
while(scanf("%d%d",&m,&n) == 2){
init();
for(i=1;i<=m;i++)
cin >> c[i] ;
memset(tag,0,sizeof(tag));
for(i=1;i<=n;i++){
cin >> a ;
for(j=1;j<=a;j++){
cin >> x ;
if(!tag[x]){
addedge(0,i,0,c[x]);
tag[x] = i ;
}
else
addedge(tag[x],i,0,100000);
}
cin >> b ;
addedge(i,n+1,0,b);
} solve(); printf("%d\n",f);
}
return 0;
}

poj 1149 pigs(最大流)的更多相关文章

  1. POJ 1149 - PIGS - [最大流构图]

    Time Limit: 1000MS Memory Limit: 10000K Description Mirko works on a pig farm that consists of M loc ...

  2. poj 1149 pigs ---- 最大流

    题意以及分析:http://ycool.com/post/zhhrrm6#rule3 主要是建图,简化图,然后在套最大流的模板. #include <iostream> #include& ...

  3. [poj] 1149 PIGS || 最大流经典题目

    原题 题目大意 给你m个猪圈以及每个猪圈里原来有多少头猪,先后给你n个人,每个人能打开一些猪圈并且他们最多想买Ki头猪,在每一个人买完后能将打开的猪圈中的猪顺意分配在这次打开猪圈里,在下一个人来之前 ...

  4. POJ 1149 PIGS(Dinic最大流)

    PIGS Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 20738   Accepted: 9481 Description ...

  5. poj 1149 Pigs 网络流-最大流 建图的题目(明天更新)-已更新

    题目大意:是有M个猪圈,N个顾客,顾客要买猪,神奇的是顾客有一些猪圈的钥匙而主人MIRKO却没有钥匙,多么神奇?顾客可以在打开的猪圈购买任意数量的猪,只要猪圈里有足够数量的猪.而且当顾客打开猪圈后mi ...

  6. 网络流(最大流):POJ 1149 PIGS

    PIGS Time Limit: 1000ms Memory Limit: 10000KB This problem will be judged on PKU. 64-bit integer(整数) ...

  7. POJ 1149 PIGS(最大流)

    Description Mirko works on a pig farm that consists of M locked pig-houses and Mirko can't unlock an ...

  8. poj 1149 PIGS【最大流经典建图】

    PIGS Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 18727   Accepted: 8508 Description ...

  9. poj 1149 PIGS(最大流经典构图)

    题目描述:迈克在一个养猪场工作,养猪场里有M 个猪圈,每个猪圈都上了锁.由于迈克没有钥匙,所以他不能打开任何一个猪圈.要买猪的顾客一个接一个来到养猪场,每个顾客有一些猪圈的钥匙,而且他们要买一定数量的 ...

随机推荐

  1. Excel2010 柱形图与折线图制表

    示例1: 数据格式 问题:现在要用柱形图表示手机网民数和年增长率,横轴表示年份,纵轴(1)表示手机网民数,纵轴折线图(2)表示年增长率,要做在一个图表中,请问该怎么做? 步骤: 1.选择A/B/C所在 ...

  2. c语言typedef运用之结构体

    #include <stdio.h> #include <stdlib.h> typedef struct stu { ]; int score; }stu_info; int ...

  3. poj 3134 Power Calculus(迭代加深dfs+强剪枝)

    Description Starting with x and repeatedly multiplying by x, we can compute x31 with thirty multipli ...

  4. 【转载自i春秋】图片马合成方法

    1.将图片和一句话木马放在同一个文件夹 2.创建快捷方式,将起始位置修改为图片和txt文本的路径. 3.进行合成,命令如下 copy .png /b + .txt /a .png 4.成功!自行测试. ...

  5. getInitParameter()

      getInitParameter()方法是在GenericServlet接口中新定义的一个方法,用来调用初始化在web.xml中存放的参量.在web.xml配置文件中一个servlet中参量的初始 ...

  6. MySql Update Select 嵌套

    UPDATE `TB_CM_Dic` SET `ParentID` = (SELECT `ID` FROM (SELECT * FROM `TB_CM_Dic`) AS B WHERE `DicNam ...

  7. 文本输入框的两种div+css的写法

    1.扁平化的设计风格.--淘宝   直接使用input.对其设置height.padding.使鼠标居中又不会占满输入框.       2.背景是图片的设计.--百度   试用span将input包裹 ...

  8. (转)一小时搞定DIV+CSS布局-固定页面开度布局

    本文讲解使用DIV+CSS布局最基本的内容,读完本文你讲会使用DIV+CSS进行简单的页面布局. 转载请标明:http://www.kwstu.com/ArticleView/divcss_20139 ...

  9. Visual Studio在页面按F7不能跳转至cs代码页的解决方法

    检查页面Page设置内的CodeBehind属性,看是否与代码页的文件名相同,不同则改正,问题得以解决.

  10. WCF入门教程系列四

    一.概述 配置也是WCF编程中的主要组成部分.在 以往的.net应用程序中,我们会把DBConn和一些动态加载类及变量写在配置文件里.但WCF有所不同.他指定向客户端公开的服务,包括服务的地址. 服务 ...