太空飞行计划问题[网络流24题之2]
来源:互联网 发布:xp升级win7软件 编辑:程序博客网 时间:2024/05/18 03:45
问题描述:
编程任务:
对于给定的实验和仪器配置情况,编程找出净收益最大的试验计划。
数据输入:
第
结果输出:
第
第
最后一行是净收益。
输入示例:
2 3
10 1 2
25 2 3
5 6 7
输出示例:
1 2
1 2 3
17
分析
本题也是一个网络流问题(这不废话,标题就是网络流
1 :构造一个图N ,顶点有Ii(1<=i<=n) ,Ej(1<=j<=m) 以及一个源S 和汇T
2 :从源点出发,向每个实验Ei 引出一条容量为Pi 的有向边
3 :从每个仪器Ij 出发,向汇点引出一条容量为Ck 的有向边
4 :每个实验分别向所需的仪器引出一条容量为+∞ 的有向边
然后求图
依照上面的思路,我们就可以利用
代码:
#include <cstdio>#include <cstring>#include <algorithm>#include <queue>#include <string>#include <sstream>#include <iostream>using namespace std;const int inf = 0x3f3f3f3f;int ans;int sum;int n,m;int tot = 1;int c[147];int head[147],nxt[1147],to[1147],wei[1147];int text[147][147];bool used[147];string str;stringstream ss;int que[147]; void add(int,int,int);bool bfs();int dinic(int,int);int main(){ freopen("shut.in","r",stdin); freopen("shut.out","w",stdout); int a; scanf("%d %d",&n,&m); getline(cin,str); for(int i=1;i<=n;++i){ ss.clear(); getline(cin,str); ss << str; ss >> a; add(1,i+1,a); sum += a; while(ss >> a){ text[i][++text[i][0]] = a; add(i+1,n+1+a,inf); } } for(int i=1;i<=m;++i){ scanf("%d",&a); add(n+1+i,n+m+2,a); } int flag; while(bfs()){ flag = 1; while(flag){ flag = dinic(1,inf); ans += flag; } } for(int i=2;i<=n+1;++i) if(c[i]){ printf("%d ",i-1); for(int j=1;j<=text[i-1][0];++j) used[text[i-1][j]] = true; } putchar(10); for(int i=1;i<=m;++i) if(used[i]) printf("%d ",i); putchar(10); printf("%d",sum-ans); return 0;}void add(int from,int tp,int value){ ++tot;nxt[tot]=head[from];head[from]=tot;to[tot]=tp;wei[tot]=value; ++tot;nxt[tot]=head[tp];head[tp]=tot;to[tot]=from;wei[tot]=0;}bool bfs(){ memset(c,0,sizeof c); c[1] = 1; int now; int H=0,T=1; que[1] = 1; do{ now = que[++H]; for(int i=head[now];i;i=nxt[i]) if(!c[to[i]] && wei[i]){ c[to[i]] = c[now]+1; que[++T] = to[i]; } }while(H < T); return c[n+m+2];}int dinic(int place,int low){ if(place == n+m+2) return low; int lower; for(int i=head[place];i;i=nxt[i]) if(c[to[i]]==c[place]+1 && wei[i]){ lower = dinic(to[i],min(low,wei[i])); if(lower){ wei[i] -= lower; wei[i^1] += lower; return lower; } } return false;}
- 太空飞行计划问题[网络流24题之2]
- 网络流24题之太空飞行计划问题(nefu476)
- 【网络流24题】太空飞行计划问题
- 【网络流24题】太空飞行计划问题
- 网络流24题:太空飞行计划问题
- 网络流24题之太空飞行计划
- [网络流24题 #2]太空飞行计划问题
- 网络流24题2 太空飞行计划问题 洛谷 2762
- 网络流24题2 太空飞行计划问题
- 【网络流24题-2】太空飞行计划
- 网络流2太空飞行计划问题
- 线性规划与网络流24题 02太空飞行计划问题
- 网络流与线性规划24题02太空飞行计划问题
- 太空飞行计划问题(网络流24题,七)
- 【网络流24题】太空飞行计划问题 …
- kyeremal-网络流24题T2-太空飞行计划问题
- 网络流24题——太空飞行计划问题
- [网络流24题][洛谷P2762]太空飞行计划问题
- 超级全面的Linq语法、SQL语法、lambda表达式对照(相同功能的不同于法)
- leetcode 344 Reverse String (in java)
- shell
- uva_681_Convex Hull Finding
- iOS js交互
- 太空飞行计划问题[网络流24题之2]
- Java集合框架:ArrayList
- 史上最详细的Android Studio系列教程四--Gradle基础
- 安卓工具类
- 博客开始
- CharSequence与String的区别
- 三大框架
- 移除view工具类
- tp上传图片