[ACM]CCF CSP [201412-5]E题 货物调度

更新下:换了zkw费用流,过掉了所有数据。代码最下面,代码很丑就是了。

、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、

费用流:把每个城市按7天拆成7个点,边就很好连了。(类似猪圈那题)。

只拿到【90分】,估计是我的费用流模板太差了。

据说有个zkw费用流很快,什么时候换下。

#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<cmath>
#include<algorithm>
#include<vector>
#include<queue>
#include<iostream>
using namespace std;
struct EDGE{
  int from,to,flow,cap,cost;
  EDGE(int u=0,int v=0,int cp=0,int cst=0){from=u;to=v;flow=0;cap=cp;cost=cst;}
};
/*
  用法:(1) clearMap
       (2) addEdge    节点个数由addEdge自动计算
       (3) solve(s,t,&flow,&cost) 计算s->t的最小费用最大流,费用保存在cost中,流保留在flow中
*/
class MCMF{                                  //对费用流进行类似ISAP的优化
  #define MCMFINF 0x7fff0000
  #define MCMFN   1010
private:
  int  s,t;
  int  n;                                    //n在添加边时自动维护,节点下标范围[0..n]
  int  p[MCMFN];
  int  d[MCMFN];
  bool inq[MCMFN];
  vector<EDGE> e;
  vector<int>  g[MCMFN];
  bool spfa(int &flow,int &cost);            //是否能找到一条增广路
  int  augument(int &flow,int& cost);        //对p中的路径进行增广,流量和费用加在flow和cost中
public:
  int  clearMap();
  int  addEdge(int u,int v,int cap,int cost);  //添加一条单向边
  int  solve(int s,int t,int& flow,int&cost);  //求解s->t的费用流
};
int MCMF::clearMap(){
  n=0;
  e.clear();
  for (int i=0;i<MCMFN;i++)g[i].clear();
  return 0;
}
int MCMF::addEdge(int u,int v,int cap,int cost){
  if (cap==0) return 
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值