[最大流] poj 1149 pigs

该博客介绍了如何运用最大流算法解决POJ 1149题目的问题,通过构建图模型,每个顾客代表一个节点,从源点向顾客连边表示猪圈的初始数量,顾客间连边表示购买行为,最后到汇点表示购买上限,通过Ford-Fulkerson算法求解最大流量,给出完整C语言代码实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

/**
[最大流] poj 1149 pigs
关键在于构图,
每个顾客分别用一个节点来表示。
对于每个猪圈的第一个顾客,从源点向他连一条边,容量就是该猪圈里的猪的初始数量。
             如果从源点到一名顾客有多条边,则可以把它们合并成一条,容量相加。
对于每个猪圈,假设有 n 个顾客打开过它,
则对所有整数 i ∈ [1, n),从该猪圈的第 i 个顾客向第 i + 1 个顾客连一条边,容量为 +∞。
从各个顾客到汇点各有一条边,容量是各个顾客能买的数量上限。

last[i] 记录i个猪圈上次被谁打开
*/
#include <stdio.h>
#include <string.h>

#define typec int
#define N 100004
#define E 1100001
// type of cost
const typec inf = 1000000000;
// max of cost
struct edge { int x, y, nxt; typec c; } bf[E];
int ne, head[E], cur[E], ps[E], dep[E];
void addedge(int x, int y, typec c)
{
// add an arc(x -> y, c); vertex: 0 ~ n-1;
    bf[ne].x = x; bf[ne].y = y; bf[ne].c = c;
    bf[ne].nxt = head[x]; head[x] = ne++;
    bf[ne].x = y; bf[ne].y = x; bf[ne].c = 0;
    bf[ne].nxt = head[y]; head[
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值