有N个工作,M种机器,每种机器你可以租或者买过来. 每个工作包括若干道工序,每道工序需要某种机器来完成,你可以通过购买或租用机器来完成。 现在给出这些参数,求最大利润

Input

第一行给出 N,M(1<=N<=1200,1<=M<=1200) 下面将有N块数据,每块数据第一行给出完成这个任务能赚到的钱(其在[1,5000])及有多少道工序 接下来若干行每行两个数,分别描述完成工序所需要的机器编号及租用它的费用(其在[1,20000]) 最后M行,每行给出购买机器的费用(其在[1,20000])
 
醉啦。。。又t又re又mle。。。人太弱。。
又是一道裸题。。
 
#include <bits/stdc++.h>
using namespace std;
const int INF = 0x3f3f3f3f; #define rep(i, j, k) for (int i = j; i <= k; ++i) const int maxn = +;
const int maxv = +, maxe = +;
struct MaxFlow {
int edge, head[maxv], to[maxe], next[maxe];
int cap[maxe];
MaxFlow() { edge = ; memset(head, -, sizeof head); }
void addedge(int u, int v, int c) {
to[edge] = v, next[edge] = head[u];
cap[edge] = c;
head[u] = edge++;
}
void addEdge(int u, int v, int c) {
// printf("%d %d %d\n", u, v, c);
addedge(u, v, c);
addedge(v, u, );
} int s, t;
int cur[maxv], dis[maxv], que[maxv*maxv/], front, back; bool bfs() {
que[front=back=] = s;
memset(dis, INF, sizeof (int)*(t+));
dis[s] = ;
while (front <= back) {
int u = que[front++];
for (int i=head[u]; i!=-; i=next[i]) {
if (cap[i]> && dis[to[i]]>dis[u]+) {
dis[to[i]] = dis[u]+;
que[++back] = to[i];
}
}
}
return dis[t]!=INF;
} int dfs(int u, int a) {
if (u==t || a==)
return a;
int flow=, f;
for (int &i=cur[u], v; i!=-; i=next[i])
if (cap[i]> && dis[v=to[i]]==dis[u]+ && (f=dfs(v, min(a, cap[i])))>) {
cap[i]-=f, cap[i^]+=f;
flow+=f, a-=f;
if (a==) break;
}
return flow;
} int MF() {
int ret = ;
while (bfs()) {
memcpy(cur, head, sizeof (int) * (t+));
ret += dfs(s, INF);
}
return ret;
}
} mf; int n, m; int main() {
scanf("%d%d", &n, &m);
int s = , t = n+m+;
int c, x, sum = ;
int p, v;
for (int i = ; i <= n; ++i) {
scanf("%d", &c);
sum += c;
mf.addEdge(s, i, c);
scanf("%d", &x);
for (int j = ; j <= x; ++j) {
scanf("%d %d", &p, &v);
mf.addEdge(i, n+p, v);
}
}
rep(i, , m) {
scanf("%d", &c);
mf.addEdge(n+i, t, c);
}
mf.s = s, mf.t = t;
printf("%d\n", sum-mf.MF()); return ;
}

1391: [Ceoi2008]order的更多相关文章

  1. BZOJ 1391: [Ceoi2008]order [最小割]

    1391: [Ceoi2008]order Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 1509  Solved: 460[Submit][Statu ...

  2. Bzoj 1391: [Ceoi2008]order 网络流,最大权闭合图

    1391: [Ceoi2008]order Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 1105  Solved: 331[Submit][Statu ...

  3. BZOJ 1391 [Ceoi2008]order

    1391: [Ceoi2008]order Description 有N个工作,M种机器,每种机器你可以租或者买过来. 每个工作包括若干道工序,每道工序需要某种机器来完成,你可以通过购买或租用机器来完 ...

  4. bzoj 1391 [Ceoi2008]order(最小割)

    [题意] 有n个有偿工作选做,m个机器,完成一个工作需要若干个工序,完成每个工序需要一个机器,对于一个机器,在不同的工序有不同的租费,但买下来的费用只有一个.问最大获益. [思路] 对于工作和机器建点 ...

  5. P4177 [CEOI2008]order(网络流)最大权闭合子图

    P4177 [CEOI2008]order 如果不能租机器,这就是最大权闭合子图的题: 给定每个点的$val$,并给出限制条件:如果取点$x$,那么必须取$y_1,y_2,y_3......$,满足$ ...

  6. [CEOI2008]order --- 最小割

    [CEOI2008]order 题目描述: 有N个任务,M种机器,每种机器你可以租或者买过来. 每个工作包括若干道工序,每道工序需要某种机器来完成,你可以通过购买或租用机器来完成. 现在给出这些参数, ...

  7. [Luogu4177][CEOI2008]order

    luogu sol 这题有点像网络流24题里面的太空飞行计划啊. 最大收益=总收益-最小损失. 先令\(ans=\sum\)任务收益. 源点向每个任务连容量为收益的边. 每个机器向汇点连容量为购买费用 ...

  8. BZOJ1391: [Ceoi2008]order

    Description 有N个工作,M种机器,每种机器你可以租或者买过来. 每个工作包括若干道工序,每道工序需要某种机器来完成,你可以通过购买或租用机器来完成. 现在给出这些参数,求最大利润 Inpu ...

  9. [CEOI2008]order

    Description 有N个工作,M种机器,每种机器你可以租或者买过来. 每个工作包括若干道工序,每道工序需要某种机器来完成,你可以通过购买或租用机器来完成. 现在给出这些参数,求最大利润 Solu ...

随机推荐

  1. python基础之01数据类型-变量-运算浅解

    python的数据类型 1  数字 数字分为整型(int),长整型(long),浮点型(float),复数(complex) 整型较为常用的功能: >>> a=-4 >> ...

  2. 豆瓣电影api

    1.获取正在热映的电影: 接口:https://api.douban.com/v2/movie/in_theaters   访问参数: start : 数据的开始项 count:单页条数 city:城 ...

  3. 转:IOS里的动画

    摘要 本文主要介绍核iOS中的动画:核心动画Core Animation, UIView动画, Block动画, UIImageView的帧动画. 核心动画Core Animation UIView动 ...

  4. Shader 学习工具篇 可视化公式工具ZGrapher

    大家好,我是怒风,本篇介绍公式可视化公式工具ZGrapher,尝试通过可视化的方式分析一下Shader中应用的公式,以求帮助初学者快速理解Shader编程中的一些常用公式 本篇的目的两个, 第一,介绍 ...

  5. 内核:为了fan的健康,我的重新编译记录

    email: jiqingwu@gmail.com date: 2008-02-13 关键词:ubuntu cpu cpufreqd cpufrequtils 编译 内核 装上ubuntu7.10后, ...

  6. Shell基础-通配符

    * - 通配符,代表任意字符 ? - 通配符,代表一个字符 # - 注释 | - 分隔两个管线命令的界定 ; - 连续性命令的界定 ~ - 用户的根目录 $ - 变量前需要加的变量值 ! - 逻辑运算 ...

  7. Css中实现一个盒子固定宽度,另一个盒子宽度自适应的方法

    Css中实现一个盒子固定宽度,另一个盒子宽度自适应的方法 网上方法很多,个人认为以下两种思想是最为常用的. 一种是让第一个盒子脱离文档流,第二个盒子离左边有一定距离. 第二种方法是使用flex布局,不 ...

  8. 渗透测试的WINDOWS NTFS技巧集合

    译者:zzzhhh 这篇文章是来自SEC Consult Vulnerability Lab的ReneFreingruber (@ReneFreingruber),分享了过去几年从各种博客文章中收集的 ...

  9. git fetch 命令

    git fetch命令用于从另一个存储库下载对象和引用. 使用语法 git fetch [<options>] [<repository> [<refspec>…] ...

  10. REX系统2

    REX(Real Time Executive)是一个面向嵌入式应用的,简单高效的,抢先式,多任务实时操作系统,支持基于优先级的任务调度算法(支持优先级反转).它提供了任务控制,任务同步,互斥,定时器 ...