PIGS POJ - 1149

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

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
题意:每个人想买猪2333,然后由m个猪圈,一个人会挑固定几个猪圈打开,然后从里面挑猪,被打开的猪圈可以随便改变猪的个数,只要总和不变即可.
建图思路:把每个顾客看成节点,将源点会第一个打开猪圈的顾客连起来,权值是顾客会第一次打开的猪圈中猪的总和,后面打开猪圈的顾客可挑选的猪相当于前一个顾客挑剩的总和.所以把前一个打开猪圈的人和当前打开的人连一条INF的边,最后所有人和汇点连一条边就好了 23333 建图还是巧妙啊QWQ

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<string>
#include<vector>
#include<set>
#include<queue>
#include<map>
#include<sstream>
#include<stack>
#include<functional>
#include<cctype>
using namespace std;
typedef long long ll;

//thanks to pyf ...
//thanks to lmd ...

#define INF 0x3f3f3f3f
#define CLR(a,b) memset(a,b,sizeof(a))
const int N = 5005;

struct Edge
{
    int from,to,cap,flow;
    Edge(int u,int v,int c,int f):from(u),to(v),cap(c),flow(f){}
};
struct Dinic
{
    int n,m,s,t;
    vector<Edge>edges;
    vector<int>G[N];
    bool vis[N];
    int d[N];
    int cur[N];
    void add_edge(int u,int v,int cap)
    {
        edges.push_back(Edge(u,v,cap,0));
        edges.push_back(Edge(v,u,0,0));
        int m = edges.size();
        G[u].push_back(m-2);
        G[v].push_back(m-1);
    }
    bool bfs()
    {
        memset(vis,0,sizeof(vis));
        queue<int>q;
        q.push(s);
        d[s] = 0;
        vis[s] = 1;
        while(!q.empty())
        {
            int x = q.front();
            q.pop();
            for(int i=0;i<G[x].size();i++)
            {
                Edge &e = edges[G[x][i]];
                if(!vis[e.to]&&e.cap > e.flow)
                {
                    vis[e.to] = 1;
                    d[e.to] = d[x] +1;
                    q.push(e.to);
                }
            }
        }
        return vis[t];
    }
    int dfs(int x,int a)
    {
        if(x==t||a==0)
            return a;
        int flow = 0,f;
        for(int &i = cur[x];i<G[x].size();i++)
        {
            Edge &e = edges[G[x][i]];
            if(d[x]+1==d[e.to]&&(f=dfs(e.to,min(a,e.cap-e.flow)))>0)
            {
                e.flow += f;
                edges[G[x][i]^1].flow -= f;
                flow += f;
                a-=f;
                if(!a)
                    break;
            }
        }
        return flow;
    }
    int Maxflow(int s,int t)
    {
        this -> s = s,this -> t = t;
        int flow = 0;
        while(bfs())
        {
            CLR(cur,0);
            flow+= dfs(s,INF);
        }
        return flow;
    }
};
int pig[N];
int vis[N];
int used[N];
int main()
{
    int n,m;
    while(scanf("%d%d",&n,&m)==2)
    {
        Dinic ans;
        int s = 0;
        int t = m+1;
        CLR(vis,0);
        for(int i=1;i<=n;i++)
        {
            scanf("%d",pig+i);
        }
        for(int i=1;i<=m;i++)
        {
            int cnt;
            int cap = 0;
            CLR(used,0);
            scanf("%d",&cnt);
            for(int j=0;j<cnt;j++)
            {
                int id;
                scanf("%d",&id);
                if(!vis[id])
                {
                    vis[id] = i;
                    cap+=pig[id];
                }
                else
                {
                    if(!used[vis[id]])
                        ans.add_edge(vis[id],i,INF);
                    vis[id] = i;
                }
            }
            if(cap)
                ans.add_edge(s,i,cap);
            int need;
            scanf("%d",&need);
            ans.add_edge(i,t,need);
        }
        printf("%d\n",ans.Maxflow(s,t));
    }
}
从配置文件加载顺序揭秘:为什么你的logback.xml读不到application.yml? 本文深入解析了Spring Boot中logback.xml无法读取application.yml配置的原因,揭示了Spring Boot配置加载机制与日志系统初始化的时序问题。通过对比logback.xml与logback-spring.xml的差异,提供了使用springProperty标签和系统属性传递等解决方案,帮助开发者有效解决日志配置问题。 阅读详情

相关推荐

避坑指南:RK3588上编译EtherCAT 1.6时遇到的权限问题和模块安装错误

本文详细解析了在RK3588平台上编译EtherCAT 1.6时常见的权限问题和模块安装错误,提供了两种实战解决方案和嵌入式开发的通用权限管理策略。通过优化内核配置和编译参数,显著提升实时性能,帮助开发者高效完成EtherCAT主站部署。

weixin_33724046的博客 453

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

保姆级教程:从 TLE 数据源获取到 Cesium 卫星轨迹可视化全流程(含常见报错排查)

本文提供从TLE数据源获取到Cesium卫星轨迹可视化的全流程保姆级教程,涵盖数据预处理、satellite.js计算、Cesium集成及性能优化等关键步骤,并针对常见报错提供详细排查方案,帮助开发者高效实现卫星轨迹可视化。

weixin_29002595的博客 295

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

Oracle Linux中/var/log/pcp/pmlogger目录膨胀问题分析与解决

本文详细分析了Oracle Linux系统中/var/log/pcp/pmlogger目录异常膨胀的常见原因与解决方案。当PCP性能监控框架的pmlogger服务日志轮转或清理机制失效时,会导致该目录无限增长,威胁系统稳定。文章提供了从服务状态诊断、配置文件审查到安全清理与预防策略的全流程实战指南,帮助运维人员快速回收磁盘空间并恢复服务正常运行。

weixin_29208327的博客 371

金证股份软件测试笔试题面试题

boss上这家公司的HR找到了我,我看了一下这家公司的业务,是我以前做过的基金与证券。还是很感兴趣的,决定去面试看看情况。 (因为只是想去涨面试经验,没有想拿offer,一些回答有点不太对,为后面木有offer埋下伏笔。其实有点亏,毕竟走路过去,而且还花了3个小时) 地点在金证股份科技大楼8楼。 2月25号 主要分为笔试题和面试。 1、笔试题 进来的时候直接给我一份笔试题做,做了一个半小时吧。 分为3道选择题和1道SQL查询题、1道案例设计题 选择题都是考察SQL函数,可能日常生活中没有见过

全村的希望的博客 4451

解题报告 之 POJ1149 Pigs

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

JUST CODE 628

Exchange 2013/2016/2019修改附件大小限制

Exchange 2013/2016/2019邮件大小限制 可以在三个位置上配置Exchange上的默认邮件大小限制: 组织传输设置 发送/接收连接器设置 用户邮箱设置 1.打开Exchange Management Shell 使用命令查看默认限制 get-transportconfig | ft maxsendsize, maxreceivesize get-receiveconnector | ft name, maxmessagesize get-sendconnector | ft

高级基础架构专家-Hunter 6098

POJ 1149 PIGS(最大流)

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

Remilia's 913

BIDS数据存储格式介绍与dcm2bids安装与使用

BIDS格式&dcm2bids安装与使用

machinelearning_er的博客 7317

Java调用OpenDDS(2)-理解OpenDDS自带的Messager示例

理解Messenger

zhangzl419 1660

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

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

Uniontake 371

yolov8涨点系列之轻量化主干网络替换

yolov8涨点系列之轻量化主干网络替换,以EfficientVit为例

zhang1379的博客 2887

POJ 1149 PIGS(最大流)

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

code 976

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

【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

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

POJ 1149 PIGS

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

蛤蛤~ 551

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 (最大流 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 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

poj1149 PIGS

最大流,思路很好

AaronPolaris 1809

POJ-1149-PIGS

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

comeace的程序人生 272

poj1149 - PIGS

想看更多的解题报告:http://blog.youkuaiyun.com/wangjian8006/article/details/7870410                                   转载请注明出处:http://blog.youkuaiyun.com/wangjian8006 题目大意:有N个顾客,有M个猪圈,每个猪圈有一定的猪,在开始的时候猪圈都是关闭的, 顾客来买书,顾客打

贰圣 4808
上一篇: Drainage Ditches POJ - 1273
下一篇: Optimal Milking POJ - 2112
OneDay_pyf
博客等级 码龄10年 6粉丝 35原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值