[网络流24题] 分配问题
来源:互联网 发布:浙江义乌淘宝网店培训 编辑:程序博客网 时间:2024/05/22 00:52
740. [网络流24题] 分配问题
★★☆ 输入文件:job.in
输出文件:job.out
简单对比时间限制:1 s 内存限制:128 MB
«问题描述:
有n件工作要分配给n个人做。第i 个人做第j 件工作产生的效益为c[i][j] 。试设计一个将n件工作分配给n个人做的分配方案,使产生的总效益最大。«编程任务:
对于给定的n件工作和n个人,计算最优分配方案和最差分配方案。«数据输入:
由文件job.in提供输入数据。
文件的第1 行有1 个正整数n,表示有n件工作要分配给n 个人做。
接下来的n 行中,每行有n 个整数c[i][j] ,1≤i≤n,1≤j≤n,
表示第i 个人做第j件工作产生的效益为c[i][j] 。
«结果输出:
程序运行结束时,将计算出的最小总效益和最大总效益输出到文件job.out中。输入文件示例 输出文件示例job.in5
2 2 2 1 2
2 3 1 2 4
2 0 1 1 1
2 3 4 3 3
3 2 1 2 1
job.out
5
14
数据范围
N<=100最大-》建负边即得最大-》负到最小 取反得最大
#include<iostream>#include<cmath>#include<cstring>#include<cstdio>#include<queue>#include<map>#include<cstdlib>#include<algorithm>#define V 505#define mod 1000000007#define LL long longusing namespace std;int n,m,sd,T,S,rt;int ff,ss,nn;int a[V],pre[V],dep[V],q[V],dis[V],pr[V],p;int sb[V][V];int ins[V];int b[V],s[V];int fd,csd;struct da{ int f,to,next,dis,cast; }Edge[V*V*2];int head[V],tot;inline void add(int x,int y,int zz,int dd){ Edge[tot].f=x; Edge[tot].to=y; Edge[tot].dis=zz; Edge[tot].cast=dd; Edge[tot].next=head[x]; head[x]=tot++; Edge[tot].f=y; Edge[tot].to=x; Edge[tot].dis=0; Edge[tot].cast=-dd; Edge[tot].next=head[y]; head[y]=tot++; }bool FIND(int st,int ed) { //cout<<st<<endl;memset(dis,0x3f,sizeof(dis));memset(ins,false,sizeof(ins));memset(pr,0,sizeof(pr));memset(s,0x3f,sizeof(s));int inf;inf = dis[0];queue <int> q;q.push(st), dis[st] = 0, s[st] = inf;while(!q.empty()) {int op = q.front(); q.pop();for(int i = head[op] ; i != -1 ; i = Edge[i].next) {if(Edge[i].dis>0&&dis[Edge[i].to]>dis[op]+Edge[i].cast) {dis[Edge[i].to] = dis[op]+Edge[i].cast;pr[Edge[i].to] = i;s[Edge[i].to] = min(s[op],Edge[i].dis); //printf("i &&& %d to %d %d\n",i,Edge[i].to,dis[Edge[i].to]);//cout<<dis[Edge[i].to]<<" "<<Edge[i].to<<" "<<ed<<endl;if(!ins[Edge[i].to]) {ins[Edge[i].to] = true;q.push(Edge[i].to);}}}ins[op] = false;}//cout<<Cost<<endl;if(dis[ed]==inf) return false;fd += s[ed];csd += dis[ed]*s[ed];int w = ed;while(w!=st) {Edge[pr[w]].dis -= s[ed];Edge[pr[w]^1].dis += s[ed];w = Edge[pr[w]].f;}//cout<<Cost<<" $%"<<endl;return true;}int st[V][V];inline int haha(){ //freopen("in.txt","r",stdin);freopen("out.txt","w",stdout); freopen("job.in","r",stdin); freopen("job.out","w",stdout); memset(head,-1,sizeof(head)); cin>>n; int x; T=n+n+1; int zz=0; for(int i=1;i<=n;i++) { add(0,i,1,0); add(i+n,T,1,0); for(int j=1;j<=n;j++) { //cin>>x; cin>>st[i][j]; add(i,j+n,1,st[i][j]); } } while(FIND(S,T)); cout<<csd<<endl;//<<" %% "<<endl; tot=0; memset(head,-1,sizeof(head)); csd=0; T=n+n+1; //int zz=0; for(int i=1;i<=n;i++) { add(0,i,1,0); add(i+n,T,1,0); for(int j=1;j<=n;j++) { //cin>>x; //cin>>s[i][j]; add(i,j+n,1,-st[i][j]); } } while(FIND(S,T)); cout<<-csd<<endl; return 0;}int gg=haha();int main(){;}
阅读全文
0 0
- [网络流24题 #18]分配问题
- cogs740 [网络流24题]分配问题
- 【网络流24题】分配问题
- [网络流24题] 分配问题
- 网络流24题18. 分配问题
- [网络流24题]分配问题
- [网络流24题] 分配问题
- [网络流24题][CODEVS1915]分配问题(网络流)
- Codevs_P1915 分配问题(网络流24题最小费用流)
- 分配问题[网络流24题之18]
- 【网络流24题-18】分配问题(BSOI2558)
- cogs 740. [网络流24题] 分配问题
- 「网络流 24 题」分配问题
- 【网络流24题-18】分配问题 网络流 费用流
- 线性规划与网络流24——分配问题
- [网络流24题] 18 分配问题(二分图最佳匹配,最小费用最大流)
- 740. [网络流24题] 分配问题 费用流/求最大最小费用
- loj6012「网络流 24 题」分配问题(费用流)
- Ubuntu下载编译WebRTC项目
- 更新Android Studio版本出现Could not find com.android.tools.build:gradle:2.2.3
- UISearchBar设置技巧(输入框,取消按钮等背景设置)
- 代码走读之rtt(继续更新)
- SQL 排序检索数据
- [网络流24题] 分配问题
- 几个坑,备注一下,
- AngularJs的UI组件ui-Bootstrap分享(四)——Datepicker Popup
- C++ 运算符重载和拷贝构造
- Proiect Euler problem 4 : Largest palindrome product
- module.exports与exports,export与export default之间的关系和区别
- [Qt] 我的一款射击游戏及设计模式
- MapReducer优化
- 动态规划题型总结