[CEOI2008] order
题目描述
有N个工作,M种机器,每种机器你可以租或者买过来. 每个工作包括若干道工序,每道工序需要某种机器来完成,你可以通过购买或租用机器来完成。 现在给出这些参数,求最大利润
输入输出格式
输入格式:
第一行给出 N,M(1<=N<=1200,1<=M<=1200) 下面将有N组数据。
每组数据第一行给出完成这个任务能赚到的钱(其在[1,5000])及有多少道工序
接下来若干行每行两个数,分别描述完成工序所需要的机器编号及租用它的费用(其在[1,20000]) 最后M行,每行给出购买机器的费用(其在[1,20000])
输出格式:
最大利润
输入输出样例
2 3 100 2 1 30 2 20 100 2 1 40 3 80 50 80 110
50 经典最小割建模。
#include<bits/stdc++.h>
#define ll long long
#define pb push_back
const int maxn=3005;
using namespace std;
const int inf=1<<30;
vector<int> g[maxn];
struct lines{int to,flow,cap;
}l[maxn*1000];
int S,T,t=-1,d[maxn],cur[maxn];
bool v[maxn];inline void add(int from,int to,int cap){l[++t]=(lines){to,0,cap},g[from].pb(t);l[++t]=(lines){from,0,0},g[to].pb(t);
}inline bool BFS(){memset(v,0,sizeof(v));queue<int> q;q.push(S),v[S]=1,d[S]=0;int x; lines e;while(!q.empty()){x=q.front(),q.pop();for(int i=g[x].size()-1;i>=0;i--){e=l[g[x][i]];if(e.flow<e.cap&&!v[e.to]){v[e.to]=1,d[e.to]=d[x]+1;q.push(e.to);}}}return v[T];
}int dfs(int x,int A){if(!A||x==T) return A;int flow=0,f,sz=g[x].size();for(int &i=cur[x];i<sz;i++){lines &e=l[g[x][i]];if(d[e.to]==d[x]+1&&(f=dfs(e.to,min(A,e.cap-e.flow)))){A-=f,flow+=f;e.flow+=f,l[g[x][i]^1].flow-=f;if(!A) break;}}return flow;
}inline int max_flow(){int an=0;while(BFS()){memset(cur,0,sizeof(cur));an+=dfs(S,inf);}return an;
}
int N,M,ans=0,now,num,K;
int main(){scanf("%d%d",&N,&M),S=0,T=N+M+1;for(int i=1;i<=N;i++){scanf("%d",&now),ans+=now,add(S,i,now);scanf("%d",&K);while(K--){scanf("%d%d",&num,&now);add(i,num+N,now);}}for(int i=1;i<=M;i++) scanf("%d",&now),add(i+N,T,now);printf("%d\n",ans-max_flow());return 0;
}
转载于:https://www.cnblogs.com/JYYHH/p/8782620.html
[CEOI2008] order相关推荐
- Bzoj 1391: [Ceoi2008]order 网络流,最大权闭合图
1391: [Ceoi2008]order Time Limit: 10 Sec Memory Limit: 64 MB Submit: 1105 Solved: 331 [Submit][Sta ...
- BZOJ1391: [Ceoi2008]order
[传送门:BZOJ1391] 简要题意: 有n个工作,m种机器,每种机器可以租或买来,给出租和买的费用,每个工作有若干个工序,每个工序需要用某种机器完成,完成工作可以获得利润 求出完成n个工作的最大利 ...
- P4177 [CEOI2008]order
传送门 答案等于总工作价值减去最小失去的价值 考虑构建最小割模型 在 $S$割 的点表示选,在 $T$割 的点表示不选 对于机器(编号从 $n+1$ 到 $n+m$) $n+i$,连边 $(n+i,T ...
- [颓废史]蒟蒻的刷题记录
QAQ蒟蒻一枚,其实我就是来提供水题库的. 以下记录从2016年开始. 1.1 1227: [SDOI2009]虔诚的墓主人 树状数组+离散化 3132: 上帝造题的七分钟 树状数组 二维区间加减+查 ...
- 107. Binary Tree Level Order Traversal II
题目 Given a binary tree, return the bottom-up level order traversal of its nodes' values. (ie, from l ...
- 102. Binary Tree Level Order Traversal
题目 Binary Tree Level Order Traversal 层次遍历二叉树 链接 Given a binary tree, return the level order traversa ...
- Mysql分页order by数据错乱重复
公司用的是Mybatis,发现分页和排序时直接传递参数占位符用的都是 ,由于,由于,由于有SQL注入风险,要改为#,但是封装page类又麻烦,所以直接使用了 pageHelper 插件了,方便快捷,但 ...
- select 和 order by
select 的优先级要高于order by,相当于是select先创建了一个临时表,再通过临时表去排序.所以,对于一些sum()的汇总,在进行排序,实际是排序的select后的字段,而不是表里的那个 ...
- access order by 判断是否除数为0
order by IIF(dz>0,yj/dz,0) desc 转载于:https://www.cnblogs.com/slyzly/p/5379482.html
最新文章
- 使用Mycat构建MySQL读写分离、主从复制、主从高可用
- 总以为自己走的很快,才发现自己是走的最慢的那个
- 《可穿戴创意设计:技术与时尚的融合》一一导读
- Android :java.lang.RuntimeException: takePicture failed
- 【网上的都不靠谱?还是得改源码】用Javasisst的字节码插桩技术,彻底解决Gson转Map时,Int变成double问题...
- java后台手动分页
- 如何用matlab画正态分布曲线
- 大一计算机应用基础答案李小艳,13级幼师班期末考试计算机试题A卷
- 力扣 二叉搜索树的最小绝对差
- ps用计算机,教你用photoshop绘制计算器
- 西门子/软件/博途/TIA PORTAL V14 SP1
- Keil 保护视力背景颜色设置和代码的颜色设置
- 我的四年大学生活总结
- 合并集合 {aaa,bbb,ccc},{bbb,ddd},{eee,fff},{ggg},{ddd,hhh}运算的结果:{aaa,bbb,ccc,ddd,hhh},{eee,fff},{ggg}
- oracle dbview用户,关于SQLRecoverableException问题的排查和分析
- 【已解决】Mysql 存储 emoji 表情报错 Incorrect string value: ‘\xF0\x9F\x98\x82\xF0\x9F
- python把字符串转化为字典_python 将字符串转换为字典
- Pubmed格式字段说明
- ORM一键还原系统官方版
- Mac AndroidStudio .9图片制作
热门文章
- linux can总线接收数据串口打包上传_关于串口,你需要知道这些!!
- 十二、PHP框架Laravel学习笔记——构造器的查询表达式
- 三、解决ie缓存问题
- speech production model
- Pytorch 神经网络nn模块
- 天池 在线编程 旅行计划(暴力回溯)
- LeetCode 1088. 易混淆数 II(回溯/BFS)
- LeetCode 135. 分发糖果(DP)
- LeetCode 2020 力扣杯全国春季编程大赛(1644/4093,前40.2%)
- LeetCode 1411. 给 N x 3 网格图涂色的方案数(数学)