poj Budget
Budget
建图好题。不知道为什么提交一直TLE。
然后。该了几次,看了别人的普通网络流都过了。
我觉得可能是卡DINIC的某些部分吧。这题就是一道普通的上下界最小流。
建图麻烦,所以说一下建图吧。
建图能够象方格取数的方法一样,把行列拆了。然后最后让行总和或列总和等于题目的要求。这样在满足一下题目的上下界要求后图就建好了。跑两边最大流就Ok了。
由于,一直TLE所以不给出完整代码。仅仅给出建图过程。囧。。。
int main()
{
int T;
scanf("%d\n",&T);
while(T--){
char ope[5];
int x,y,c; scanf("%d%d\n",&N,&M); init();
memset(in,0,sizeof(in)); for(int i = 1;i <= N;++i){
for(int j = 1;j <= M;++j){
B[i][j] = 0;
C[i][j] = INF;
}
} for(int i = 1;i <= N;++i){ //行
scanf("%d",&c); addEdge(ss,i,0);
in[ss] -= c;
in[i] += c;
} for(int j = 1;j <= M;++j){ //列
scanf("%d",&c); addEdge(j+N,tt,0);
in[j + N] -= c;
in[tt] += c;
} int cas;
scanf("%d",&cas);
while(cas--){
scanf("%d%d%s%d",&x,&y,ope,&c);
if(c < 0){
flag = true;
}
int x1,x2,y1,y2;
x1 = x2 = x;
y1 = y2 = y;
if(!x) x1 = 1,x2 = N;
if(!y) y1 = 1,y2 = M;
for(int i = x1;i <= x2;++i){
for(int j = y1;j <= y2;++j){
if(ope[0] == '=')
B[i][j] = C[i][j] = c;
else if(ope[0] == '>')
B[i][j] = max(B[i][j],c + 1);
else
C[i][j] = min(C[i][j],c - 1);
if(C[i][j] < B[i][j])
flag = false;
}
}
} if(flag){
puts("IMPOSSIBLE");
if(T)puts("");
continue;
} //建图
for(int i = 1;i <= N;++i){
for(int j = 1;j <= M;++j){
addEdge(i,j + N,C[i][j] - B[i][j]);
in[i] -= B[i][j];
in[j+N] += B[i][j];
}
} int sum = 0;
for(int i = 1;i <= tt;++i){
if(in[i] > 0){
sum += in[i];
addEdge(src,i,in[i]);
}
if(in[i] < 0){
addEdge(i,sink,-in[i]);
}
} addEdge(tt,ss,INF); ///!!!!!!!!!! tt --> ss 不要在粗心了!!! T_T
int flow = maxFlow(src,sink); if(flow != sum){
puts("IMPOSSIBLE");
} else {
maxFlow(src,sink);
}
if(T)puts("");
}
return 0;
}
poj Budget的更多相关文章
- POJ 2396 Budget 有上下界的网络流
POJ 2396 Budget 题意简述:给定矩阵(每个元素都是非负整数)各行各列的和,并且限制其中的某些元素,给出一个可行解,特殊评测.矩阵规模小于200*20. 网络流的模型是显而易见的,不过对 ...
- POJ 2396 Budget(有源汇上下界网络流)
Description We are supposed to make a budget proposal for this multi-site competition. The budget pr ...
- [poj] 2396 [zoj] 1994 budget || 有源汇的上下界可行流
poj原题 zoj原题 //注意zoj最后一行不要多输出空行 现在要针对多赛区竞赛制定一个预算,该预算是一个行代表不同种类支出.列代表不同赛区支出的矩阵.组委会曾经开会讨论过各类支出的总和,以及各赛区 ...
- poj 2396 Budget 边容量有上下界的最大流
题意: 给一个矩阵的每行和及每列和,在给一些行列或点的限制条件.求一个满足的矩阵. 分析: 转化为有上下界的网络流,注意等于也是一种上下界关系,然后用dinic算法. 代码: //poj 2396 / ...
- POJ 2396 Budget【网络流】
题意: cas //测试数据组数 n m //行数 列数 a1 a2 ... an //每行的和 b1 b2 ... bn //每列的和 q ...
- poj 2396 Budget
一个m行n列的矩阵,给出每行每列中元素的和,以及对一些格子的大小限制,求一个可行方案,输出矩阵. 大小限制形如:严格大于i,严格小于i,等于i. 1<=m<=200.1<=n< ...
- POJ 2396 Budget (有源汇有上下界最大流)
题意:给定一个矩阵的每行的和和每列的和,以及每个格子的限制,让你求出原矩阵. 析:把行看成X,列看成Y,其实就是二分图,然后每个X到每个Y边一条边,然后加一个超级源点和汇点分别向X和Y连边,这样就形成 ...
- POJ 2396 Budget ——有上下界的网络流
给定矩阵的每行每列的和,和一些大于小于等于的限制.然后需要求出一组可行解. 上下界网络流. 大概的思想就是计算出每一个点他需要强行流入或者流出的量,然后建出超级源点和汇点,然后删除下界,就可以判断是否 ...
- poj 2396 Budget【有上下界的网络流】
第一步:建立无源汇有上下界的网络模型 每行 i 作为一个点并连边(s, i, Ri, Ri),每列 j 作为一个点并连边(j, t, Cj, Cj),设 Uij, Lij 分别表示第 i 行第 j 列 ...
随机推荐
- 拍照图片滤镜sample
本文章主要介绍拍完照片后对图片的渲染进行处理 可以对拍出的照片进行选择不同的滤镜,令在图片上附有编辑框,供大家对图片进行描述,这是一个可以手动拖动的编辑框,在这里主要介绍下,手指放到控件上什么情况下视 ...
- Android 驱动(二) IIC简单介绍
一. I2C简单介绍 I2C(Inter-Integrated Circuit)总线是一种由 Philips 公司开发的两线式串行总线,用于连接微控制器及其外围设备.I2C 总线最基本的长处就是简单性 ...
- Swift - 设置UIView的背景色和背景图片
1,使用UIColor的内置颜色设置背景色 1 2 var page = UIView() page.backgroundColor = UIColor.greenColor() 2,设置自定义颜色 ...
- 显示形状回归算法(ESR)代码介绍
源地址:http://www.thinkface.cn/thread-3704-1-6.html 人脸对齐包括两个部分,分别为训练部分和测试部分.所有的代码基于opencv2.0.(一)训练阶段Ste ...
- How to Design Programs, Second Edition
How to Design Programs, Second Edition How to Design Programs, Second Edition
- SilkTest Q&A 6
Q51.GMO在线的问题? 该问题是一个特例,不具有代表性,故不翻译了. Q52.如何为一个testplan的属性定义值? A52:你必须在使用前为一个testplan定义值: 1.确保你的test ...
- HNCU1099:堆积木
http://hncu.acmclub.com/index.php?app=problem_title&id=111&problem_id=1099 题目描述 小明的侄子要过生日了,小 ...
- 取CPU序列号,获取网卡,取硬盘系列号,获取目录下的文件,强制删除目录
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms ...
- ThinkPHP 自动创建数据、自动验证、自动完成详细例子介绍(十九)
原文:ThinkPHP 自动创建数据.自动验证.自动完成详细例子介绍(十九) 1:自动创建数据 //$name=$_POST['name']; //$password=$_POST['password ...
- java图形
JFreeCharteclipse图形化编程插件jigloojfaceibm的jface基于swt,swing解决了awt存在的lcd问题.swing组件:container,window,frame ...