UVa 11082 Matrix Decompressing (最大流问题)

这是一道关于最大流问题的编程题目,要求构造一个矩阵,使得前i行元素之和等于Ai,前i列元素之和等于Bi。通过建立二分图模型,利用源点s和汇点t进行网络流求解,最终确定矩阵的每个元素值。由于原矩阵元素范围为1-20,需要将所有元素减1以适应最大流可能的0流量情况,最终结果加1得到正确答案。

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

     题目链接:http://vjudge.net/problem/UVA-11082


     题意:构造一个r行c列的矩阵,满足前i行元素之和为Ai,前i列元素之和为Bi。

     

     好巧妙的思路,怎么也想不到是网络流问题,看来还是太菜啊。

    设每一行之和为R[i],每一列之和为C[i]。建一个二分图,每行对应一个X结点,每列对应一个Y结点。然后建立源点s和汇点t,s向每个X连一条边,容量为R[i],每个Y向t连一条边,容量为C[i]。然后每个X都向每个Y连一条边,容量为20,求一遍最大流,若从源点出发的边和流向汇点的边均满载,则Xi->Yi的流量即为格子(i,j)的值。但这样有一个问题,原矩阵的范围是1-20,求最大流后可能出现某条边流量为0的情况啊,不符合范围。所以将矩阵各元素减1使其范围变为1—19。最后求答案是加1即可。

     

#include<cstdio>
#include<cstring>
#include<iostream>
#include<set>
#include<map>
#include<vector>
#include<queue>
#include<algorithm>
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
#define lc rt<<1
#define rc rt<<1|1
using namespace std;
typedef long long LL;
const int maxn = 50 + 5;
const int INF = 1e9 + 10;
int C[maxn], R[maxn], sum[maxn];
i
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值