太空飞行计划

时间限制:1000 ms  |  内存限制:65535 KB
难度:4
 
描述
       W 教授正在为国家航天中心计划一系列的太空飞行。每次太空飞行可进行一系列商业性实验而获取利润。现已确定了一个可供选择的实验集合E={E1,E2,…,Em},和进行这些实验需要使用的全部仪器的集合I={I1,I2,…In}。实验Ej需要用到的仪器是I的子集Rj 。配置仪器Ik的费用为ck美元。实验Ej的赞助商已同意为该实验结果支付pj美元。W教授的任务是找出一个有效算法,确定在一次太空飞行中要进行哪些实验并因此而配置哪些仪器才能使太空飞行的净收益最大。这里净收益是指进行实验所获得的全部收入与配置仪器的全部费用的差额。
    对于给定的实验和仪器配置情况,编程找出净收益最大的试验计划。
 
 
输入
多组测试数据(不超过500组)
每组数据第1行有2 个正整数m和n(m,n <= 100)。m是实验数,n是仪器数。接下来的m 行,每行是一个实验的有关数据。第一个数赞助商同意支付该实验的费用f(f < 10000);接着是该实验需要用到的仪器的个数t,接着是t个仪器的编号。最后一行的n个数是配置每个仪器的费用pi(pi <=100)。
输出
每组数据输出占一行,输出最大的净收益(如果无法收益,输出0)。
样例输入
  1. 2 3
  2. 10 2 1 2
  3. 25 2 2 3
  4. 5 6 7
样例输出
  1. 17
上传者
ACM_杨延玺
解题:最大权闭合子图,输入真尼玛蛋疼,好吧,原来的那个题,有几组数据貌似有问题。南阳这个只需要输出最大权值就是了,不需要输出实验编号以及仪器编号
  1. #include <iostream>
  2. #include <cstdio>
  3. #include <cstring>
  4. #include <cmath>
  5. #include <algorithm>
  6. #include <climits>
  7. #include <vector>
  8. #include <queue>
  9. #include <cstdlib>
  10. #include <string>
  11. #include <set>
  12. #include <stack>
  13. #define LL long long
  14. #define pii pair<int,int>
  15. #define INF 0x3f3f3f3f
  16. using namespace std;
  17. const int maxn = ;
  18. struct arc{
  19. int to,flow,next;
  20. arc(int x = ,int y = ,int z = -){
  21. to = x;
  22. flow = y;
  23. next = z;
  24. }
  25. };
  26. arc e[maxn*maxn];
  27. int head[maxn],d[maxn],cur[maxn];
  28. int tot,m,n,S,T;
  29. void add(int u,int v,int flow){
  30. e[tot] = arc(v,flow,head[u]);
  31. head[u] = tot++;
  32. e[tot] = arc(u,,head[v]);
  33. head[v] = tot++;
  34. }
  35. bool bfs(){
  36. memset(d,-,sizeof(d));
  37. d[S] = ;
  38. queue<int>q;
  39. q.push(S);
  40. while(!q.empty()){
  41. int u = q.front();
  42. q.pop();
  43. for(int i = head[u]; ~i; i = e[i].next){
  44. if(e[i].flow && d[e[i].to] == -){
  45. d[e[i].to] = d[u] + ;
  46. q.push(e[i].to);
  47. }
  48. }
  49. }
  50. return d[T] > -;
  51. }
  52. int dfs(int u,int low){
  53. if(u == T) return low;
  54. int tmp = ,a;
  55. for(int &i = cur[u]; ~i; i = e[i].next){
  56. if(e[i].flow && d[e[i].to] == d[u] + &&(a=dfs(e[i].to,min(e[i].flow,low)))){
  57. e[i].flow -= a;
  58. e[i^].flow += a;
  59. tmp += a;
  60. low -= a;
  61. if(!low) break;
  62. }
  63. }
  64. if(!tmp) d[u] = -;
  65. return tmp;
  66. }
  67. int dinic(){
  68. int ans = ;
  69. while(bfs()){
  70. memcpy(cur,head,sizeof(head));
  71. ans += dfs(S,INF);
  72. }
  73. return ans;
  74. }
  75. void go(int u){
  76. char str[maxn];
  77. gets(str);
  78. for(int i = ; str[i];){
  79. while(str[i] &&(str[i] < '' || str[i] > '')) ++i;
  80. int x = ;
  81. while(str[i] && str[i] >= '' && str[i] <= ''){
  82. x = x* + str[i++] - '';
  83. }
  84. if(x) add(u,x+m,INF);
  85. }
  86. }
  87. bool vis[maxn];
  88. vector<int>ans1,ans2;
  89. void dfs(int u){
  90. vis[u] = true;
  91. for(int i = head[u]; ~i; i = e[i].next){
  92. if(vis[e[i].to] || e[i].flow == ) continue;
  93. if(e[i].to > m) ans2.push_back(e[i].to-m);
  94. else ans1.push_back(e[i].to);
  95. dfs(e[i].to);
  96. }
  97. }
  98. bool cmp(int a,int b){
  99. return a > b;
  100. }
  101. int main() {
  102. int w;
  103. while(~scanf("%d %d",&m,&n)){
  104. memset(head,-,sizeof(head));
  105. int ans = S = tot = ;
  106. T = n + m + ;
  107. ans1.clear();
  108. ans2.clear();
  109. for(int i = ; i <= m; ++i){
  110. scanf("%d",&w);
  111. add(S,i,w);
  112. ans += w;
  113. go(i);
  114. }
  115. for(int i = ; i <= n; ++i){
  116. scanf("%d",&w);
  117. add(m+i,T,w);
  118. }
  119. ans -= dinic();
  120. /*memset(vis,false,sizeof(vis));
  121. dfs(S);
  122. sort(ans1.begin(),ans1.end(),cmp);
  123. sort(ans2.begin(),ans2.end(),cmp);
  124. for(int i = ans1.size()-1; i >= 0; --i)
  125. printf("%d%c",ans1[i],i?' ':'\n');
  126. for(int i = ans2.size()-1; i >= 0; --i)
  127. printf("%d%c",ans2[i],i?' ':'\n');*/
  128. printf("%d\n",ans);
  129. }
  130. return ;
  131. }

NYIST 531 太空飞行计划的更多相关文章

  1. 洛谷 P2762 太空飞行计划问题 P3410 拍照【最大权闭合子图】题解+代码

    洛谷 P2762 太空飞行计划问题 P3410 拍照[最大权闭合子图]题解+代码 最大权闭合子图 定义: 如果对于一个点集合,其中任何一个点都不能到达此集合以外的点,这就叫做闭合子图.每个点都有一个权 ...

  2. LOJ6001 - 「网络流 24 题」太空飞行计划

    原题链接 Description 有个实验和个仪器,做实验有报酬买仪器有花费.每个实验都需要一些仪器,求最大净收益(实验报酬仪器花费),并输出一组方案. Solution 实验向所需仪器连边,实验的点 ...

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

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

  4. Luogu 2762 太空飞行计划 / Libre 6001 「网络流 24 题」太空飞行计划 (网络流,最大流)

    Luogu 2762 太空飞行计划 / Libre 6001 「网络流 24 题」太空飞行计划 (网络流,最大流) Description W 教授正在为国家航天中心计划一系列的太空飞行.每次太空飞行 ...

  5. 题解 P2762 【太空飞行计划问题】

    P2762 太空飞行计划问题 题目描述 W 教授正在为国家航天中心计划一系列的太空飞行.每次太空飞行可进行一系列商业性实验而获取利润.现已确定了一个可供选择的实验集合E={E1,E2,-,Em},和进 ...

  6. 网络流24题:P2762 太空飞行计划问题

    P2762 太空飞行计划问题 题目背景 题目描述 W 教授正在为国家航天中心计划一系列的太空飞行.每次太空飞行可进行一系列商业性实验而获取利润.现已确定了一个可供选择的实验集合E={E1,E2,…,E ...

  7. Cogs 727. [网络流24题] 太空飞行计划(最大权闭合子图)

    [网络流24题] 太空飞行计划 ★★☆ 输入文件:shuttle.in 输出文件:shuttle.out 简单对比 时间限制:1 s 内存限制:128 MB [问题描述] W 教授正在为国家航天中心计 ...

  8. 题解:线性规划与网络流24题 T2 太空飞行计划问题

    太空飞行计划问题 问题描述 W教授正在为国家航天中心计划一系列的太空飞行.每次太空飞行可进行一系列商业性实验而获取利润.现已确定了一个可供选择的实验集合E={E1,E2,-,Em},和进行这些实验需要 ...

  9. [网络流24题] 太空飞行计划(cogs 727)

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

随机推荐

  1. BZOJ 1016 最小生成树计数(矩阵树定理)

    我们把边从小到大排序,然后依次插入一种权值的边,然后把每一个联通块合并. 然后当一次插入的边不止一条时做矩阵树定理就行了.算出有多少种生成树就行了. 剩下的交给乘法原理. 实现一不小心就会让程序变得很 ...

  2. UDP Linux编程(客户端&服务器端)

    服务器端 服务器不用绑定地址,他只需要进行绑定相应的监听端口即可. #include <sys/types.h> #include <sys/socket.h> #includ ...

  3. hadoop 使用java操作hdfs

    1.创建目录 import java.io.IOException; import org.apache.hadoop.conf.Configuration; import org.apache.ha ...

  4. HTTP请求和响应模式(B/S)(2)

    B/S          及浏览器/客服端模式 根据发送的状态码不同,显示response的状态不同

  5. maven 构建web项目

    Maven规定,必须创建以下几个Source Folder src/main/resources src/main/Java src/test/resources src/test/java 添加以上 ...

  6. IntegerToBinaryString

    IntegerToBinaryString 方法写的非常的巧妙:佩服佩服! package com.stono.jdk; public class IntegerToBinaryString { pu ...

  7. 关于Android的.so文件所须要知道的

    早期的Android系统差点儿仅仅支持ARMv5的CPU架构,你知道如今它支持多少种吗?7种. Android系统眼下支持以下七种不同的CPU架构:ARMv5.ARMv7 (从2010年起),x86 ...

  8. Eclipse 更新Android SDK后,新建项目出现appcompat_v7project的相关问题

    Eclipse 更新Android SDK后,新建项目出现各种问题.网上各种解决方式,搞了好久,总结一下. 1.出现error: Error retrieving parent for item: N ...

  9. git使用(公钥私钥产生--远程库添加公钥--本地库关联远程库-使用)

    原文1:http://www.cnblogs.com/wangmingshun/p/5424767.html 原文2(指令):http://blog.csdn.net/xiaohanluo/artic ...

  10. shiro动态控制url资源

    怎么利用shiro权限动态控制每个url资源呢?主要包括jsp(html)页面.action的url访问,而静态资源和登录资源则可直接访问. 所谓动态控制url就是url的权限控制不是手动写死在配置文 ...