POJ 2396 Budget 有源汇上下界可行流

Qt中常见的面试题总结 基于Qt开发的一些常用面试题 阅读详情
 
Budget
Time Limit: 3000MS Memory Limit: 65536K
Total Submissions: 3383 Accepted: 1275 Special Judge

Description

We are supposed to make a budget proposal for this multi-site competition. The budget proposal is a matrix where the rows represent different kinds of expenses and the columns represent different sites. We had a meeting about this, some time ago where we discussed the sums over different kinds of expenses and sums over different sites. There was also some talk about special constraints: someone mentioned that Computer Center would need at least 2000K Rials for food and someone from Sharif Authorities argued they wouldn't use more than 30000K Rials for T-shirts. Anyway, we are sure there was more; we will go and try to find some notes from that meeting.

And, by the way, no one really reads budget proposals anyway, so we'll just have to make sure that it sums up properly and meets all constraints.

Input

The first line of the input contains an integer N, giving the number of test cases. The next line is empty, then, test cases follow: The first line of each test case contains two integers, m and n, giving the number of rows and columns (m <= 200, n <= 20). The second line contains m integers, giving the row sums of the matrix. The third line contains n integers, giving the column sums of the matrix. The fourth line contains an integer c (c < 1000) giving the number of constraints. The next c lines contain the constraints. There is an empty line after each test case.

Each constraint consists of two integers r and q, specifying some entry (or entries) in the matrix (the upper left corner is 1 1 and 0 is interpreted as "ALL", i.e. 4 0 means all entries on the fourth row and 0 0 means the entire matrix), one element from the set {<, =, >} and one integer v, with the obvious interpretation. For instance, the constraint 1 2 > 5 means that the cell in the 1st row and 2nd column must have an entry strictly greater than 5, and the constraint 4 0 = 3 means that all elements in the fourth row should be equal to 3.

Output

For each case output a matrix of non-negative integers meeting the above constraints or the string "IMPOSSIBLE" if no legal solution exists. Put one empty line between matrices.

Sample Input

4
2 3
8 10
5 6 7
4
0 2 > 2
2 1 = 3
2 3 > 2
2 3 < 5
2 2
4 5
6 7
1
1 1 > 10
2 2
3 7
4 6
2
0 0 > -100
0 0 < 100

2

2 3
8 10
5 6 7
4
0 2 > 2
2 1 = 3
2 3 > 2
2 3 < 5

2 2
4 5
6 7
1
1 1 > 10

 

Sample Output

2 3 3
3 3 4

IMPOSSIBLE

 

Source

 
 
题意:给一个n*m的矩阵,n行的和,m列的和,
还有一些约束关系:
x y >=< k 表示 x行y列的数 >=< k(x=0表示整列,y=0表示整行,x=y=0表示整个矩阵)
现在要求一个矩阵满足上述条件,不满足输出IMPOSSIBLE
 
解法:这就是一个有源汇上下界可行流问题。
先说这个问题的解法:由t到s连一条边,权值inf,转换为无源汇上下界可行流问题。
加入超级源S,超级汇T。
保留原图的边uv,边权为上界c-下界b,
S到v连边,边权为b,
u到T连边,边权为b。
 
再说原图的建立:n行+m列的节点加上源s和汇t。
每个格子xy当做一条边,由x到y连边。
s到n行节点连边,边权为每行的和。
m列节点到t连边,边权为每列的和。
 
我刚开始把每个格子当做节点,TLE。。。o(╯□╰)o
另外出现c<b直接输出IMPOSSIBLE
 
代码:
#include<cstdio>
#include<cstring>
#include<algorithm>
#define N 225
#define inf 999999999
using namespace std;

int n,m,s,t,num,adj[N],dis[N],q[N],b[N][25],c[N][25],ans[N][25];
struct edge
{
	int v,w,pre;
	edge(){}
	edge(int vv,int ww,int p){v=vv;w=ww;pre=p;}
}e[20005];
void insert(int u,int v,int w)
{
	e[num]=edge(v,w,adj[u]);
	adj[u]=num++;
	e[num]=edge(u,0,adj[v]);
	adj[v]=num++;
}
int bfs()
{
	int i,x,v,head=0,tail=0;
	memset(dis,0,sizeof(dis));
	dis[s]=1;
	q[++tail]=s;
	while(head!=tail)
	{
		x=q[head=(head+1)%N];
		for(i=adj[x];~i;i=e[i].pre)
			if(e[i].w&&!dis[v=e[i].v])
			{
				dis[v]=dis[x]+1;
				if(v==t)
					return 1;
				q[tail=(tail+1)%N]=v;
			}
	}
	return 0;
}
int dfs(int x,int limit)
{
	if(x==t)
		return limit;
	int i,v,tmp,cost=0;
	for(i=adj[x];~i&&cost<limit;i=e[i].pre)
		if(e[i].w&&dis[x]==dis[v=e[i].v]-1)
		{
			tmp=dfs(v,min(limit-cost,e[i].w));
			if(tmp)
			{
				e[i].w-=tmp;
				e[i^1].w+=tmp;
				cost+=tmp;
			}
			else
				dis[v]=-1;
		}
	return cost;
}
int Dinic()
{
	int ans=0;
	while(bfs())
		ans+=dfs(s,inf);
	return ans;
}
int main()
{
	int C;
	scanf("%d",&C);
	while(C--)
	{
		int i,j,k,u,v,w,S,T,sum=0,flag=1,x1,x2,y1,y2,row[205],col[25];
		char str[5];
		memset(adj,-1,sizeof(adj));
		memset(b,0,sizeof(b));
		memset(c,0x3c,sizeof(c));
		num=0;
		scanf("%d%d",&n,&m);
		S=0;
		T=n+m+1;
		s=T+1;
		t=s+1;
		for(i=1;i<=n;i++)
			scanf("%d",&row[i]);
		for(i=1;i<=m;i++)
			scanf("%d",&col[i]);
		scanf("%d",&k);
		while(k--)
		{
			scanf("%d%d%s%d",&u,&v,str,&w);
			x1=x2=u;
			y1=y2=v;
			if(!u)x1=1,x2=n;
			if(!v)y1=1,y2=m;
			for(i=x1;i<=x2;i++)
				for(j=y1;j<=y2;j++)
				{
					if(str[0]=='=')
						b[i][j]=c[i][j]=w;
					else if(str[0]=='>')
						b[i][j]=max(b[i][j],w+1);
					else
						c[i][j]=min(c[i][j],w-1);
					if(c[i][j]<b[i][j])
						flag=0;
				}
		}
		if(!flag)
		{
			puts("IMPOSSIBLE");
			continue;
		}
		for(i=1;i<=n;i++)
			for(j=1;j<=m;j++)
			{
				insert(i,j+n,c[i][j]-b[i][j]);
				sum+=b[i][j];
				if(b[i][j])
				{
					insert(s,j+n,b[i][j]);
					insert(i,t,b[i][j]);
				}
			}
		insert(T,S,inf);
		for(i=1;i<=n;i++)
		{
			sum+=row[i];
			insert(s,i,row[i]);
			insert(S,t,row[i]);
		}
		for(j=1;j<=m;j++)
		{
			sum+=col[j];
			insert(s,T,col[j]);
			insert(n+j,t,col[j]);
		}
		if(Dinic()<sum)
			puts("IMPOSSIBLE");
		else
		{
			for(i=1;i<=n;i++)
				for(j=adj[i];~j;j=e[j].pre)
					ans[i][e[j].v-n]=e[j^1].w;
			for(i=1;i<=n;i++)
			{
				for(j=1;j<=m;j++)
					printf("%d ",ans[i][j]+b[i][j]);
				puts("");
			}
		}
		puts("");
	}
}

基于Playwright与异步技术的公司评价智能爬取实战:以Glassdoor为例 本文将介绍一套基于最新Python技术的智能爬虫解决方案,使用Playwright实现浏览器自动化,结合异步编程和智能解析技术,高效抓取Glassdoor等平台的公司评价数据。我们不仅关注数据获取,更注重数据的结构化处理和反反爬虫策略的实现。 阅读详情

相关推荐

IEC61850实战:从ICD文件解析到模型构建

本文深入解析IEC61850标准中的ICD文件结构,从Header、IED到DataTypeTemplates部分,详细介绍了如何构建电力自动化设备的数据模型。通过实战案例展示ICD文件的创建过程,并分享常见问题的调试技巧,帮助工程师快速掌握IEC61850建模方法,提升电力系统自动化项目的实施效率。

weixin_26841743的博客 496

POJ 2396 Budget (有源汇有上下界的可行流)

POJ 2396 Budget  链接:http://poj.org/problem?id=2396 题意:给定一个M*N的矩阵,给定每行每列的和,以及其中一些值的限定条件,问能否构成一个可行的矩阵。 思路: 添加一个源点,向每行连边,每条边的上下界都为该行的和;添加一个汇点,每列向汇点连边,边的上下界都为该列的和。然后每行向每列连边,边的上下界一开始为(0,INF),之后

SIOFive的专栏 1613

数字后端零基础入门系列 | Innovus零基础LAB学习Day9

数字后端零基础入门系列 | Innovus零基础LAB学习Day9

weixin_37584728的博客 4575

POJ2396 Budget [有源汇上下界可行流]

POJ2396 Budget 题意:n*m的非负整数矩阵,给出每行每列的和,以及一些约束关系x,y,&gt;=&lt;,val,表示格子(x,y)的值与val的关系,0代表整行/列都有这个关系,求判断是否有解并求一组解 建图显然 \[s \rightarrow _{[行和,行和]} x \rightarrow _{格子(x,y)的限制[l,r]} y \rightarrow_{[列和,列和]} ...

weixin_34087307的博客 156

OSG三维渲染引擎编程学习之一:“第一章:OSG介绍” 之 “1.1 OSG简介”

第一章:OSG介绍; 1.1 OSG简介。

LuckyHanMo的博客 3220

汽车行业OTD业务模式入门学习

本文是在学习彭俊松老师的《汽车行业整车订单交付系统》后,对于OTD理解的一些摘录,供诸位参考学习。

qq_40664711的博客 1万+

POJ2396&ZOJ1994--Budget【有源汇上下界可行流】

链接:http://poj.org/problem?id=2396 题意:给一个n*m的矩阵,给出每行的总和以及每列的总和,再给出某些位置的最小或最大限制,问是否存在可能的矩阵,如果存在输出一种矩阵信息。 思路:这是一个有源汇的上下界可行流,对于这种题,从汇点连一条弧到源点,容量为INF,这不会影响流量平衡条件,并且此时原图转换为了无源汇的上下界可行流,剩下的做法和无源汇一样。 建图

阳光照耀圣西罗 1034

VEML7700环境光传感器原理图设计,已量产(光线传感器)

最近做便携显示设备的自动亮度调节模块,最终敲定了 VEML7700 这款数字光传感器 —— 一是它 0~120klx 的宽量程刚好覆盖 “暗室→户外强光” 的全场景,二是 Filtron™技术让它的光谱响应和人眼高度贴合,测出来的 “亮度” 更符合实际视觉感受,加上 O-Trim™技术把输出公差压到 10% 以内,省了不少后期校准的功夫。搭好电路后串口直接读 lx 数值,稳定性和精度都够,这篇聊聊这个模块的硬件设计细节。

不脱发的程序猿 598

POJ 2396 - Budget 有源汇的上下界可行流

<br />POJ 2396 - Budget 有源汇的上下界可行流转自http://hi.baidu.com/zfy0701/blog/item/6449d82a64e15e3e5343c1ba.html<br />http://acm.pku.edu.cn/JudgeOnline/problem?id=2396<br />题目的大意是:给定一个矩阵每行,每列的和,和各个元素的限制条件(>, =, <),求出一个满足这各种限制的矩阵。<br />这个模型很类似与经典的矩阵取整模型。<br /><br />

hqd_acm的专栏 887

计算机组成原理(第三版)唐朔飞-第六章计算机的运算方法-课后习题(17-32)

计算机组成原理(第三版)唐朔飞-第六章计算机的运算方法-课后习题(17-32)

weixin_45735391的博客 12万+

土壤数据库辅助工具SPAW计算土壤导水率

首先点击打开根据之前的1比100土壤数据查表得到各个组分含量其中Field Capacity是田间持水量Matric Bulk Density是基质粒密度。

所有专家都曾始于新手 3443

poj 2396 Budget(有源汇上下界可行流)

Budget Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 5621   Accepted: 2140   Special Judge Description We are supposed to make a budget proposal for this m

WEYuLi的专栏 889

【RT-DETR涨点改进】全网独家首发、特征融合改进篇 | AAAI 2026 | 引入CDEM交叉动态增强模块,双向引导和融合,在低光图像增强中有效提升了图像的亮度,提升小目标和暗目标的检测准确率

本文提出了一种基于CDEM(交叉动态增强模块)改进的rtdetr网络模型,有效提升了在低光和复杂环境下的目标检测性能。CDEM模块通过动态增强亮度与色彩特征,改善图像输入质量,增强细节和对比度。该模块具有轻量级结构,易于集成到现有模型中,能够显著提升小目标和暗目标的检测准确率与鲁棒性。文章详细介绍了CDEM模块的结构原理、实现方法,并提供了完整的代码实现和配置指南,包括三种改进版本的YAML配置文件。实验结果表明,该方法在图像增强和目标检测任务中均取得了优异性能。

Ai缝合怪、助力小伙伴高效发论文 141

【poj2396】Budget 有源汇上下界可行流

DescriptionWe are supposed to make a budget proposal for this multi-site competition. The budget proposal is a matrix where the rows represent different kinds of expenses and the columns represent diff

DQS的树洞 928

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

POJ2396:Budget 有源汇上下界可行流

好久没A的这么舒畅了。。第一次写居然1A辣。。Part2: 有源汇上下界可行流 有源汇上下界可行流就是在多了源点和汇点,这样导致除了源点和汇点外的其他店都流量守恒,我们可以从TT向SS连一条容量为无穷大的边,保证S,TS,T也流量守恒,然后就可以转化为无源汇上下界可行流做啦。 这题的建图很直观,行列建图,每行连源点,每列连汇点,上下界均为sumisum_i,然后关于点(i,j)(i,j)的操作

ws_fqk 565

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

POJ ~ 2396 ~ Budget (有源汇上下界可行流)

题意 T组测试数据,给你一个n*m的矩阵,输入每一行的和,每一列的和,在输入一些形如x y &gt; z限制条件,如果x为0表示所有行,y为0表示所有列,x==0,y==0表示整个矩阵。求是否村子满足要求的矩阵,存在就输出矩阵。   思路 转化为有源汇上下界可行流来做。 行列看作点,行为Xi,列为Yi,建立源点s,汇点t。 ①源点向行Xi建边,上下界均为行和 ②列Yi向汇点Yi建边,...

张松超的博客 331

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

poj2396 Budget(有源汇的有上下界的可行流)

有源汇的有上下界的可行流,加一条边t->s,容量为(0,inf)即可转化为无源汇的有上下界的可行流。

Icefox的博客 527

[POJ2396]Budget(有源汇有上下界的可行流+讲解)

我可以去冬眠了?

薇小薇 511

poj 2396 Budget--有源汇+有上下界+可行流

/* 有源汇 有上下界 求可行流 有源汇可以转化为无源汇:添加一条边t~s (0,0x7fffffff) 就成了无源汇 基本流程是: 构造附加网络(添加新源 新汇 分离必要弧) 求附加网络的最大流 若新源 新汇 相邻的边都是满流,则存在可行流 题意: 有个表格,给出每行的和以及每列的和 还有某些元素的要求 求一个符合条件的表格 一个比较详细的讲解 http://blog.csdn.n

1130

POJ 2396 Budget 有源汇有上下界的可行流

题目:http://poj.org/problem?id=2396 题意:假定有一个n * m的数字矩阵,现在给出矩阵的每一行的和与每一列的和,且给出了一些矩阵中元素需要满足的条件,即某个元素应该在某个范围内,问有没有满足条件的矩阵,若有输出这个矩阵 思路:有源汇有上下界的可行流。记录每个元素的最大下界,最小上界,元素就在这个范围内,没被限制的就是无穷大。从源点向每一行连边,容量为每一行的和,

弱智就要多努力 353

【POJ2396】Budget(有源汇的上下界可行流)

题意:要求构建一个m*n的矩阵,给出每行,每列的和,和C个要求:表示某个坐标的数必须严格”&gt;”或”=”或”&lt;”某个值,0是通配符,表示一整行(列)。 建图: 源点-&gt;横排 (该横排的和) 横排-&gt;该横排的点 (按C个要求给权值,分上界下界) 该横排的点-&gt;竖排(按C个要求给权值,分上界下界) 竖排-&gt;汇点(该竖排的和) 这就成了有源汇的可行流问题(不...

CaptainChen的博客 561

【有源汇有上下界可行流】POJ-2396(ZOJ-1994) Budget

Budget Time Limit: 3000MS   Memory Limit: 62M         Special Judge Description We are supposed to make a budget proposal for this multi-site competition. The budget pr

JSure的代码库 899

[POJ2396]Budget(有源汇有上下界的可行流)

题目描述传送门题解和无源汇有上下界的可行流类似,只需要加一条边t->s,限制为[0,inf]就可以了,相当于是让源点和汇点也满足流量平衡 然后再建立附加源汇ss,tt,其余的就和无源汇的一样了这道题的话,把每一行看成一个点xi,每一列看成一个点yi,那么首先s->xi,[sumxi,sumxi],yi->t,[sumyi,sumyi] 对于某一个点(i,j)的限制[l,r],xi->yj,[l,

zyf2000 527

poj 2396 Budget(有源汇上下界可行流)

这题的建图真恶心。好不容易写完后结果还wa了,顿时生无可恋啊,看了下discuss,说不能输出负数,最后不能输出多余的空行,我把这俩都改了,就AC了,虽说那里说这是在zoj不能ac的原因,不过在poj也适用,哈哈。 思路:每行为一个点,每列为一个点,给出的限制就是行列之间连线的流的上下界,初始下届为0,上界为INF。然后建好图之后,建立一个虚拟源点和虚拟汇点,源点和边连线,流量上下界为行的和,列和

梦幻的蔷薇色 475

[poj] 2396 [zoj] 1994 budget || 有源汇的上下界可行流

poj原题 zoj原题 //注意zoj最后一行不要多输出空行 现在要针对多赛区竞赛制定一个预算,该预算是一个行代表不同种类支出、列代表不同赛区支出的矩阵。组委会曾经开会讨论过各类支出的总和,以及各赛区所需支出的总和。另外,组委会还讨论了一些特殊的约束条件。组委会的任务是制定一个满足所有约束条件且行列和满足要求的预算。 有源汇的上下界可行流。 1、建原图(对于上界Max和下界Min的边连边为Max...

weixin_30764137的博客 108

poj 2396 zoj 1994 Budget(有源汇上下界的可行流)

Budget Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 6237   Accepted: 2367   Special Judge Description We are supposed to make a budget proposal for th

youngkl博客 817
上一篇: HDU 4033 4036 4039 The 36th ACM/ICPC Asia Regional Chengdu Site —— Online Contest
下一篇: POJ 3155 Hard Life 最大密度子图
power721
博客等级 码龄18年 176粉丝 135原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值