poj1149 PIGS

网络流/最大流算法与题目总结 最大流模型为有N个湖(点),他们有小溪相连(边),每个小溪都有它们单位时间的最大流量,最大流求的是一个湖(源点)到另一个湖(汇点)单位时间内能流入的最大流量。求最大流的一个算法为 ford_fulkerson算法,算法思想:1.从源点开始寻找一条路径到汇点,记录这条路径流量最小的边的流量为m,然后最大流量+=m,然后每条边的流量都减去m,然后反向更新流量(每条边反方向的流量加上m);2.重复步骤1直到找不到路径到汇点为止,最终的最大流量即为所求的最大流。ford_fulkerson C++模板:void f 阅读详情
PIGS
Time Limit: 1000MSMemory Limit: 10000K
Total Submissions: 13677Accepted: 6044

Description

Mirko works on a pig farm that consists of M locked pig-houses and Mirko can't unlock any pighouse because he doesn't have the keys. Customers come to the farm one after another. Each of them has keys to some pig-houses and wants to buy a certain number of pigs.
All data concerning customers planning to visit the farm on that particular day are available to Mirko early in the morning so that he can make a sales-plan in order to maximize the number of pigs sold.
More precisely, the procedure is as following: the customer arrives, opens all pig-houses to which he has the key, Mirko sells a certain number of pigs from all the unlocked pig-houses to him, and, if Mirko wants, he can redistribute the remaining pigs across the unlocked pig-houses.
An unlimited number of pigs can be placed in every pig-house.
Write a program that will find the maximum number of pigs that he can sell on that day.

Input

The first line of input contains two integers M and N, 1 <= M <= 1000, 1 <= N <= 100, number of pighouses and number of customers. Pig houses are numbered from 1 to M and customers are numbered from 1 to N.
The next line contains M integeres, for each pig-house initial number of pigs. The number of pigs in each pig-house is greater or equal to 0 and less or equal to 1000.
The next N lines contains records about the customers in the following form ( record about the i-th customer is written in the (i+2)-th line):
A K1 K2 ... KA B It means that this customer has key to the pig-houses marked with the numbers K1, K2, ..., KA (sorted nondecreasingly ) and that he wants to buy B pigs. Numbers A and B can be equal to 0.

Output

The first and only line of the output should contain the number of sold pigs.

Sample Input

3 3
3 1 10
2 1 2 2
2 1 3 3
1 2 6

Sample Output

7
 
    这题难点在于如何建图,如何理解题目中的“if Mirko wants, he can redistribute the remaining pigs across the unlocked pig-houses.”也将成为建图的关键。
    如果我们把每个顾客作为图中的点,则对于拥有某个猪圈的钥匙的连续的两个顾客i和j,建一条边i->j。现在解释为何可以这样建边:比如说i拥有猪圈1,2,3的钥匙,j拥有猪圈1的钥匙,这样i,j同时拥有3号猪圈的钥匙,按理说j只能打开1号猪圈,但i顾客购买猪后,Mirko是可以随意分配1,2,3中猪的数量的,所以j顾客实质上是可以得到1,2,3中的猪的。
    因为猪圈有m个,所以我们可以加一个源点s,分别与n个顾客建边,鉴于上面的建边方式,s应与每个猪圈的第一个顾客建边,边容量为猪圈中猪的数量,若某个顾客同时为多个猪圈的第一个顾客,则数量相加。
    每个顾客购买猪的数量是有上限的,所以我们应该引入一个汇点t,每个顾客与t建一条边,边容量为每个顾客需要购买的猪的数量。
#include <iostream>
#include<cstdio>

using namespace std;
const int MAXN=105;
const int INF=(1<<29);
int flow[MAXN][MAXN];//容量限制
int dalta[MAXN];//改变量
int pre[MAXN];
int flag[MAXN];//标号
int m,n;

int EK()
{
    int i,maxflow=0;
    int queue[MAXN],front,rear;
    while(1)
    {
        front=rear=0;
        for(i=1;i<=n+1;i++)
            flag[i]=0;
        flag[0]=1;
        pre[0]=0;
        dalta[0]=INF;
        queue[rear++]=0;
        while(front!=rear&&!flag[n+1])
        {
            int v=queue[front++];
            for(i=1;i<=n+1;i++)
            {
                if(flag[i])
                    continue;
                if(flow[v][i])
                {
                    dalta[i]=min(dalta[v],flow[v][i]);
                    flag[i]=1;
                    pre[i]=v;
                    queue[rear++]=i;
                }
            }
        }
        if(!flag[n+1])
            break;
        maxflow+=dalta[n+1];
        i=n+1;
        while(i!=0)
        {
            flow[pre[i]][i]-=dalta[n+1];
            flow[i][pre[i]]+=dalta[n+1];
            i=pre[i];
        }
    }
    return maxflow;
}

int main()
{
    int i,j;
    int pigs[1005];//每个猪圈中的猪的数量
    int before[1005];//每个猪圈的前一个顾客
    while(~scanf("%d%d",&m,&n))
    {
        for(i=0;i<=n+1;i++)
            for(j=0;j<=n+1;j++)
                flow[i][j]=0;
        for(i=1;i<=m;i++)
        {
            scanf("%d",pigs+i);
            before[i]=-1;
        }
        for(i=1;i<=n;i++)
        {
            int num;
            scanf("%d",&num);
            while(num--)
            {
                scanf("%d",&j);
                if(before[j]==-1)
                {
                    before[j]=i;
                    flow[0][i]+=pigs[j];
                }
                else
                {
                    flow[before[j]][i]=INF;
                    before[j]=i;
                }
            }
            scanf("%d",&j);
            flow[i][n+1]=j;
        }
        printf("%d\n",EK());
    }
    return 0;
}

1011 - 网络流 - PIGS(POJ1149) 传送门   分析 好生优秀的一道建模题 一个人打开了某几个猪圈,就相当于在这个时间段把这些猪圈给“合并” 了。 然后后面有人如果要打开其中的某一个,只用找到合并的这个点,然后 连一条边即可,相当于里面的猪都可以被调换过来。 对于每个猪圈维护 lasti,表示最后访问的时间,然后每次连边接到 last, 再把 last 更新即可。 但实际上并不需要每次合并都新建一个点,直接合并到顾客身上就... 阅读详情

相关推荐

Speedtree学习笔记(案例)——拥有多种材质的植物如何导入使用(以草为例)

注:Speedtree无论保存还是导入模型其存储路径不可有中文。 第一步拆分草的模型 根据所需的材质去拆分(例:假若草的果实,茎秆和叶子是不同的材质那么就需拆分为三份;假若画的全部颜色及材质一样就没有必要去拆分模型) 第二步导入草的模型 在Mesh面板中依次导入草的模型——Do nothing additional right now 第三步扩大草的生长区域范围(可省略)...

L人青的博客 5722

poj1149(标号法)

PIGS Time Limit:1000MS Memory Limit:10000K Total Submissions:14239 Accepte...

Phoebe_Wu2016的博客 122

差分运放电路输出电压偏置设计解析

差分运算放大电路是信号处理中的基础模块,通过差分对管结构实现共模抑制与差模放大。其核心原理基于运放的虚短虚断特性,当电阻网络满足对称条件时,输出电压与输入差分成正比。在工业测量系统中,由于ADC通常仅支持正电压输入,需要通过偏置电路将双极性信号平移至正电压范围。典型设计采用精密基准电压源和匹配电阻网络,既保持信号完整性又满足系统接口要求。本文以-100V高压测量为例,详细解析了分压网络设计、参考电压选取以及电阻匹配等关键技术要点,为传感器接口电路设计提供实践参考。

weixin_35750747的博客 470

poj PIGS 1149 (最大流&&经典建图) 好题

PIGS Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 18712   Accepted: 8501 Description Mirko works on a pig farm that consists of M locked pig-houses and Mirk

yanghui07216的博客 862

别再只怪贴片厂了!从MLCC内部裂纹,看懂物料质量与工艺应力的博弈

本文深入分析了MLCC内部裂纹的失效原因,提供了从裂纹形态学到生产全流程的失效风险地图的完整分析框架。通过实战案例和检测技术组合,帮助工程师精准锁定MLCC失效背后的真凶,优化物料质量和工艺应力管理。

weixin_33122947的博客 292

初探802.11协议(6)——Wi-Fi 6新特性简介

Wi-Fi 6新机制(特性)介绍

FanFF的博客 1522

poj 1149 PIGS 【网络流经典建模】【求最大流】

PIGS Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 18051   Accepted: 8206 Description Mirko works on a pig farm that consists of M locked pig-houses and Mi

世界很大 1346

Pdu Router(PduR)模块

1. PduR路由基本功能 2. PduR总线网关功能 3. PduR缓存机制 4. 总结

weixin_43759043的博客 3849

POJ 1149 PIGS 解题报告

 可以将每个顾客能打开的猪圈合并为一个,如果其中一个已经被合并过,则加一条由此猪圈 到 之前拥有这个猪圈钥匙的顾客的猪圈,容量为无穷。这样我们就可以得到一个带s,t,和 N个中间节点的流量图。然后求最大流即可。#include #include #include using namespace std;const int M(1100),N(110),INF(0x7ffffff

suikay的专栏 718

2023年GESP12月认证C++五级真题解析

例如,如果a=4,那么4是最⼩的幸运数,而1不是,但我们可以连续对1做3次+1操作,使其变为4,所以我们可以说,1幸运化后的结果是 4。【题目大意】给一个完全平方数的标准,推导出哪些是超级幸运数,然后判断N个数字中,哪些是超级幸运数,是的输出“lucky”,不是的输出离该数字最近的比它大的数字。前一个数字,下标是j的数字是偶数,后面的数字下标是j+1的是奇数,按照要求,偶数在奇数的后面,要交换。A函数时间复杂度是O(n/2),B函数算法是O(sqrt(n)),大部分情况后者是优的,值更小。

lan_in的博客 1007

STM32CubeMX配置FSMC驱动外部SRAM全流程详解

FSMC(灵活静态存储控制器)是STM32实现高速并行外部存储扩展的核心外设,其本质是将片外SRAM地址空间映射为CPU可直接读写的内存区域。原理上依赖于精确的时序寄存器配置(如BTRx)、GPIO复用功能启用及AHB3总线时钟同步机制,技术价值在于免DMA搬运的零拷贝访问能力与确定性低延迟。典型应用场景包括工业HMI缓存、医疗设备实时数据采集、嵌入式图形加速等对带宽和确定性要求严苛的系统。本文围绕STM32F407ZG平台,结合STM32CubeMX工程化配置、硬件信号完整性设计与HAL库底层映射逻辑,系

weixin_34718952的博客 232

poj 1149 PIGS

<br />// poj 1149 PIGS (网络流) /* 网络流构图,用sap邻接表版过的,一开始用邻接阵,因为点有两千多个就MLE了,构图如下: 1. 源点s到客户连边,权值为客户所需求量 2. 客户到他所能打开的猪圈连边,权值为inf 3. 如果客户i能打开猪圈k,客户j(j<i) 也能打开猪圈k,则i连边到j(只连一次),权值为inf 4. 猪圈i拆点,i-i' 权值为猪圈中猪数量 5. 猪圈i' 到汇点 t 连边,权值为inf */ #include <iost

birdforever的专栏 781

关于 ABAP OPEN SQL 的动态 WHERE 条件和 Dynamic Selections

ABAP动态查询技术解析 本文介绍了ABAP中实现灵活数据库查询的动态选择技术,通过FREE_SELECTIONS函数组实现用户自定义查询条件。核心内容包括: 传统固定WHERE条件的局限性,无法满足业务多变需求 Dynamic Selections机制的工作原理,使用FREE_SELECTIONS_INIT初始化、FREE_SELECTIONS_DIALOG交互 完整Demo程序演示如何构建通用表数据浏览器: 用户输入表名后校验权限 调用动态选择函数生成条件 动态拼接WHERE子句执行查询 使用CL_SA

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 676

POJ 1149 PIGS【SAP】

POJ 1149 PIGS大意:有m个猪圈和n个顾客,最初猪圈是锁着的。每个顾客有其中的A把钥匙,需要买B头猪顾客在买完猪便将门锁上,而且顾客是按照顺序来的。商家可以对开着的猪圈里面的猪进行任意调配 分析:构图1.将猪圈编号为1,2,。。。。m;2.将顾客编号为m+1,m+2,....m+n3.源点为0,汇点为m+n+14.若猪圈i有a[i]头牛,那么建立一条从0到i...

a48634331的博客 162

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

解题报告 之 POJ1149 Pigs

解题报告 之 POJ1149 PIGS 最大流 网络流 建图

JUST CODE 628

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

[网络流-最大流]POJ1149-PIGS (特殊建图)

题目链接 POJ1149PIGS 题意 有M个猪圈,每个猪圈里初始时有若干头猪。一开始所有猪圈都是关闭的。依次来了N个顾客,每个顾客分别会打开指定的几个猪圈,从中买若干头猪。每个顾客分别都有他能够买的数量的上限。每个顾客走后,他打开的那些猪圈中的猪,都可以被任意地调换到其它开着的猪圈里,然后所有猪圈重新关上。问总共最多能卖出多少头猪。(1 &lt;= N &lt;= 100, 1 &...

Uniontake 371

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

POJ 1149 PIGS(最大流)

POJ 1149 PIGS 题目链接 题意:有n个猪圈,m个顾客,猪圈中一开始有一些猪,顾客轮流来(注意是有先后顺序的),然后每个顾客会开启一些猪圈,在开启的猪圈中最多买b只猪,之后可以任意把剩下的猪分配到开着的猪圈中,问最多能卖出几只猪 思路:这题的关键在于建模,由于顾客有先后顺序,假如后来的顾客会开启x门,前面一个顾客也会开启x门,那么前面顾客相当与可以分配给后面顾客, 所

Remilia's 913

POJ 1149 PIGS(最大流)

POJ 1149 PIGS(最大流) http://poj.org/problem?id=1149 题意:        有M个猪圈,每个猪圈里初始时有若干头猪。一开始所有猪圈都是关闭的。依次来了N个顾客,每个顾客分别会打开指定的几个猪圈,从中买若干头猪。每个顾客分别都有他能够买的数量的上限。每个顾客走后,他打开的那些猪圈中的猪,都可以被任意地调换到其它开着的猪圈里,然后所有猪圈重新关上。问

code 976

POJ 1149 PIGS

题目传送门:POJ 1149 PIGS         题目大意是说有 m 个猪圈,每个猪圈中有一定数量的猪。有 n 个人,分别在不同的日子里来买猪,每个人买猪的时候指定买哪些猪圈中的猪,在卖猪这天,主人可以随意的调整猪圈中的猪的数量,然后关上猪圈,等待下一个买猪的人到来,每个顾客分别有个买猪数量的上限。问主人通过合理的安排之后,最多能卖多少猪?         网络流,建图方法:

蛤蛤~ 551

【POJ 1149 PIGS】网络流 & 合并节点简化构图 & Dinic算法

PIGS Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 21812 Accepted: 9975 DescriptionMirko works on a pig farm that consists of M locked pig-houses and Mirko can’t unlock any

楚江枫 1260

POJ - 1149 PIGS (最大流 Dinic)

PIGS 题目链接:http://poj.org/problem?id=1149 Mirko works on a pig farm that consists of M locked pig-houses and Mirko can't unlock any pighouse because he doesn't have the keys. Customers come to the fa...

YOONGI 208

poj 1149 PIGS 题解(网络流,建图)

原题链接: poj 题意简述 有m(&lt;=1000)m(&lt;=1000)m(<=1000)头猪,和n(&lt;=100)n(&lt;=100)n(<=100)个顾客。第iii个顾客有ai(&lt;=m)a_i(&lt;=m)ai​(<=m)个喜欢的猪(给定这些猪的编号),但是最多只会买bi(&lt;=m)b_i(&a...

LightningUZ的博客 400

Poj 1149 Pigs

Poj 1149 Pigs Mirko works on a pig farm that consists of M locked pig-houses and Mirko can't unlock any pighouse because he doesn't have the keys. Customers come to the farm one after another. Each of...

weixin_30617797的博客 148

瑞萨RZN2L EtherCAT从站开发实战:从原理到调试的完整避坑指南

EtherCAT作为高实时工业以太网协议,采用主从式“飞过式”读写机制,从站通过ESC硬件在帧经过时处理数据,实现微秒级延迟。理解INIT、PRE-OP、SAFE-OP、OP状态机以及PDO、SDO等通信对象,是开发从站的基础。瑞萨RZN2L内部集成EtherCAT ESC,配合实时ARM Cortex-R内核,适合构建成本低、性能高的从站控制器。开发过程中需使用RASC/e2 studio配置PHY接口,通过SSC生成协议栈,并同步ESI文件与对象字典。针对主站调试,TwinCAT和Wireshark是定

weixin_33851177的博客 316

poj-1149-PIGS --网络流

Poj 1149pigs —题目大意 —Mirko养着一些猪 猪关在一些猪圈里面 猪圈是锁着的 他自己没有钥匙(汗) —只有要来买猪的顾客才有钥匙 —顾客依次来 每个顾客会用他的钥匙打开一些猪圈 买走一些猪 然后锁上 —在锁上之前 Mirko有机会重新分配这几个已打开猪圈的猪 —现在给出一开始每个猪圈的猪数 每个顾客所有的钥匙和要买走的猪数 问Mirko最多能卖掉几头猪

xiaoyu1_1的专栏 925

POJ-1149-PIGS

POJ-1149-PIGS http://poj.org/problem?id=1149 最大流问题 每个顾客分别用一个节点来表示。 对于每个猪圈的第一个顾客,从源点向他连一条边,容量就是该猪圈里的猪的初始数量,如果从源点到一名顾客有多条边,则可以把它们合并成一条,容量相加。 对于每个猪圈,假设有 n 个顾客打开过它,则对所有整数 i ∈ [1, n),从该猪圈的第 i 个顾客向第 i

comeace的程序人生 272
上一篇: hdu1532 Drainage Ditches
下一篇: poj2112 Optimal Milking (Dinic+Floyd+二分)
捡石子的小孩
博客等级 码龄14年 51粉丝 117原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值