1391: [Ceoi2008]order

Time Limit: 10 Sec  Memory Limit: 64 MB
Submit: 1105  Solved: 331
[Submit][Status][Discuss]

Description

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

Input

第一行给出 N,M(1<=N<=1200,1<=M<=1200) 下面将有N块数据,每块数据第一行给出完成这个任务能赚到的钱(其在[1,5000])及有多少道工序 接下来若干行每行两个数,分别描述完成工序所需要的机器编号及租用它的费用(其在[1,20000]) 最后M行,每行给出购买机器的费用(其在[1,20000])

Output

最大利润

Sample Input

2 3
100 2
1 30
2 20
100 2
1 40
3 80
50
80
110

Sample Output

50

HINT

Source

[Submit][Status][Discuss]

题解:

最大权闭合图。

又忘了咋连边了。。。QAQ

最大权闭合图:

构造一个原点S,汇点T。S -> 权值为正的点  连一条容量为权值的边。权值为负的点 -> T  连一条容量为权值的绝对值的边。原图中的边连INF。

但本题中有可以租的机器,每一次租也要花费代价。考虑最大权闭合图中的原图的边连INF的意义:使边的两个顶点必须同时选。但这道题可以不选但要付出代价,所以将原图中的边连容量为租的花费。

注意:一定要加 当前弧优化 。。。

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 #define MAXN 2520
 4 #define INF 1e9
 5 struct node
 6 {
 7     int begin,end,value,next;
 8 }edge[2884810];
 9 int cnt,Head[MAXN],q[MAXN],dis[MAXN],cur[MAXN],S,T;
10 void addedge(int bb,int ee,int vv)
11 {
12     edge[++cnt].begin=bb;edge[cnt].end=ee;edge[cnt].value=vv;edge[cnt].next=Head[bb];Head[bb]=cnt;
13 }
14 void addedge1(int bb,int ee,int vv)
15 {
16     addedge(bb,ee,vv);addedge(ee,bb,0);
17 }
18 int read()
19 {
20     int s=0,fh=1;char ch=getchar();
21     while(ch<'0'||ch>'9'){if(ch=='-')fh=-1;ch=getchar();}
22     while(ch>='0'&&ch<='9'){s=s*10+(ch-'0');ch=getchar();}
23     return s*fh;
24 }
25 int BFS()
26 {
27     int head,tail,u,v,i;
28     head=0;tail=1;q[tail]=S;
29     memset(dis,-1,sizeof(dis));dis[S]=0;
30     while(head!=tail)
31     {
32         head++;if(head==2510)head=0;
33         u=q[head];
34         for(i=Head[u];i!=-1;i=edge[i].next)
35         {
36             v=edge[i].end;
37             if(edge[i].value>0&&dis[v]<0)
38             {
39                 dis[v]=dis[u]+1;
40                 tail++;if(tail==2510)tail=0;
41                 q[tail]=v;
42             }
43         }
44     }
45     if(dis[T]<=0)return 0;
46     else return 1;
47 }
48 int DFS(int u,int minflow)
49 {
50     int used=0,ans,v,i;
51     if(u==T)return minflow;
52     for(i=cur[u];i!=-1;i=edge[i].next)
53     {
54         v=edge[i].end;
55         if(edge[i].value>0&&dis[v]==dis[u]+1)
56         {
57             ans=minflow-used;
58             ans=DFS(v,min(ans,edge[i].value));
59             edge[i].value-=ans;if(edge[i].value>0)cur[u]=i;
60             edge[i^1].value+=ans;
61             used+=ans;
62             if(used==minflow)return minflow;
63         }
64     }
65     if(used==0)dis[u]=-1;
66     return used;
67 }
68 int Dinic()
69 {
70     int maxflow=0,ans=0,i;
71     while(BFS()){for(i=1;i<=T;i++)cur[i]=Head[i];ans=DFS(S,INF);if(ans==0)break;maxflow+=ans;}
72     return maxflow;
73 }
74 int main()
75 {
76     int ans=0,n,m,s1,s2,s3,s4,s5,i,j;
77     n=read();m=read();
78     S=n+m+1;T=S+1;
79     memset(Head,-1,sizeof(Head));cnt=1;
80     for(i=1;i<=n;i++)
81     {
82         s1=read();s2=read();
83         addedge1(S,i,s1);ans+=s1;
84         for(j=1;j<=s2;j++)
85         {
86             s3=read();s4=read();
87             addedge1(i,s3+n,s4);
88         }
89     }
90     for(i=1;i<=m;i++){s5=read();addedge1(n+i,T,s5);}
91     printf("%d",ans-Dinic());
92     return 0;
93 }

转载于:https://www.cnblogs.com/Var123/p/5326890.html

Bzoj 1391: [Ceoi2008]order 网络流,最大权闭合图相关推荐

  1. YBTOJ:矛盾指数(网络流-最大权闭合图)

    文章目录 题目描述 解析 代码 网络流要大胆建图 题目描述 公司内部共nnn个员工,员工之间可能有矛盾.若员工uuu和员工vvv有矛盾,用边(u,v)(u,v)(u,v)表示,共mmm个矛盾. 现在公 ...

  2. jzoj5057-[GDSOI2017模拟4.13]炮塔【网络流,最大权闭合图】

    正题 题面链接:https://gmoj.net/senior/#main/show/5057 题目大意 n∗mn*mn∗m的网格上有一些炮和敌军,每个炮可以攻击在它方向上一个敌军,但是要求炮弹的轨迹 ...

  3. P2805-[NOI2009]植物大战僵尸【网络流,最大权闭合图】

    正题 题目链接:https://www.luogu.com.cn/problem/P2805 题目大意 n∗mn*mn∗m的格子,攻击这个格子(x,y)(x,y)(x,y)可以获得价值cx,yc_{x ...

  4. p2762-太空飞行计划问题【网络流,最大权闭合图,最小割】

    正题 AC评测记录链接: https://www.luogu.org/record/show?rid=7965757 大意 有nnn个实验,有m" role="presentati ...

  5. 【POJ - 2987】Firing(最大权闭合图,网络流最小割,输出方案最小,放大权值法tricks)

    题干: You've finally got mad at "the world's most stupid" employees of yours and decided to ...

  6. LibreOJ #6001. 「网络流 24 题」太空飞行计划 最大权闭合图

    #6001. 「网络流 24 题」太空飞行计划 内存限制:256 MiB时间限制:1000 ms标准输入输出 题目类型:传统评测方式:Special Judge 上传者: 匿名 提交提交记录统计讨论测 ...

  7. 太空飞行计划LibreOJ - 6001(网络流24题)(最大权闭合图)

    题目描述 W 教授正在为国家航天中心计划一系列的太空飞行.每次太空飞行可进行一系列商业性实验而获取利润.现已确定了一个可供选择的实验集合  ,和进行这些实验需要使用的全部仪器的集合 .实验  需要用到 ...

  8. 【网络流24题】B、太空飞行计划问题(最大权闭合图转最小割、最小割方案输出)

    整理的算法模板合集: ACM模板 B.太空飞行计划问题(最大权闭合图转最小割.最小割方案输出)[省选/NOI- ] P2762 太空飞行计划问题 [问题分析] 最大权闭合图问题,可以转化成最小割问题, ...

  9. 51nod1551-集合交易【hall定理,最大权闭合图,网络流】

    正题 题目链接:http://www.51nod.com/Challenge/Problem.html#problemId=1551 题目大意 nnn个集合,nnn个物品,每个集合有一些物品,一个价钱 ...

最新文章

  1. java简单的面试题目_简单的面试题目,大跌眼镜的结果
  2. Ubuntu16.04 安装谷歌浏览器并配置常用插件与扩展
  3. O2O产品经理,请多关注屏幕之外
  4. nodejs项目的package-lock.json文件的用途
  5. 应用程序利用ADO对象访问数据库
  6. 东八区转为0时区_格林尼治时间转换为北京时间
  7. 网页html无图片代码显示图片,BASE64编码方式(Date Url)
  8. 06002_Redis概述
  9. 我,对安全研究专家下手的黑客!
  10. python实现xml数据解析处理
  11. python中tqdm的用法
  12. MYSQL 二进制还原
  13. github客户端教程
  14. 无线通信中的IQ调制,BPSK调制,QPSK调制,16QAM调制的理解
  15. Word 从指定页(正文)插入页码
  16. 聊天系统服务器端类图,使用Java多线程来实现多人聊天室 附实例代码
  17. 一种简单的业务数据监控告警设计方案
  18. html背景视频如何自动播放,使用视频作为网页背景的技术探讨
  19. java都市男人心痒痒_男人听了会“心痒痒”的四个称呼,低情商的女人从来没叫过...
  20. .NET Interop 互操作 COM+

热门文章

  1. 犹豫了许久,还是写个年总结记录一下吧
  2. jmeter的xpath断言 [XPath Assertion]
  3. MySQL-数据类型
  4. Java创建线程的方式
  5. BZOJ2298 [HAOI2011]problem a
  6. 几种xml读取方法比较
  7. 关于@DQ的留言回复
  8. Bug: CuteEditor与IE8不兼容
  9. 更新词汇至Unigram词表进行识别
  10. MySQL DDL操作--------外键最佳实战