最短路对应费用,路径数量对应流量。为限制点经过次数,拆点为边。跑一次流量为2的最小费用最大流。

最小费用最大流和最大流EK算法是十分相似的,只是把找增广路的部分换成了求费用的最短路。

#include<bits/stdc++.h>
using namespace std;
typedef long long ll; const int maxv = +;
const int maxe = +; struct Edge
{
int v,cap,cost,nxt;
void IN(int V,int C,int c,int N)
{
v = V; cap = C; cost = c; nxt = N;
}
}edges[maxe]; int head[maxv],ecnt,vcnt; void AddEdge(int u,int v,int C,int c)
{
edges[ecnt].IN(v,C,c,head[u]);
head[u] = ecnt++;
edges[ecnt].IN(u,,-c,head[v]);
head[v] = ecnt++;
}
const int INF = 0x3f3f3f3f;
int S,T;
bool vis[maxv];
int d[maxv],p[maxv],a[maxv];
bool spfa()
{
memset(d,0x3f,sizeof(int)*vcnt);
memset(vis,,sizeof(bool)*vcnt); queue<int> q; q.push(S); d[S] = ;
a[S] = INF;
while(q.size()){
int u = q.front(); q.pop();
vis[u] = false;
for(int i = head[u]; ~i; i = edges[i].nxt){
Edge &e = edges[i];
if(e.cap&& d[e.v] > d[u]+e.cost){
d[e.v] = d[u] + e.cost;
p[e.v] = i;
a[e.v] = min(a[u],e.cap);
if(!vis[e.v]) { q.push(e.v); vis[e.v] = true; }
}
}
}
return d[T] != INF;
} ll MinCostMaxFlow()
{
ll cost = ;
while(spfa()){
cost += d[T];
for(int i = T; i != S; i = edges[p[i]^].v){
edges[p[i]].cap -= a[T];
edges[p[i]^].cap += a[T];
}
}
return cost;
} int pin[maxv],pout[maxv]; int main()
{
//freopen("in.txt","r",stdin);
int v,e;
int S = ; T = ;
while(~scanf("%d%d",&v,&e)){ vcnt = ; ecnt = ;
pin[] = pout[] = vcnt++;
pin[v] = pout[v] = vcnt++;
for(int i = ; i < v; i++) {
pin[i] = vcnt++;
pout[i] = vcnt++;
}
memset(head,-,sizeof(int)*(vcnt));
AddEdge(S,pin[],,);
AddEdge(pout[v],T,,);
for(int i = ; i < v; i++) AddEdge(pin[i],pout[i],,);
while(e--){
int u,v,c; scanf("%d%d%d",&u,&v,&c);
AddEdge(pout[u],pin[v],,c);
}
printf("%lld\n",MinCostMaxFlow());
}
return ;
}

最新文章

  1. Class.forName和ClassLoader.loadClass等
  2. 解决Win7下VC6.0插入ActiveX控件对话框为空的问题
  3. Yocto开发笔记之《工具使用:TFTP &amp; NFS &amp; SSH》(QQ交流群:519230208)
  4. activity栈的关系
  5. 5.1 stack,queue以及priority_queue
  6. IT书籍的选择与阅读
  7. Poj(3615),Floyd,最大值中的最小值
  8. String性能优化
  9. Java 关于中文乱码处理的经验总结【转载】
  10. 安装JDK设置环境变量
  11. spring框架总结(01)
  12. js == 和 ===
  13. Lumen框架-错误&amp;日志
  14. c/c++线性循环队列
  15. bzoj2721 [Violet5]樱花
  16. 安装VC++2015运行库时出现0x80240037错误
  17. 【译】第七篇 SQL Server安全跨数据库所有权链接
  18. solr入门
  19. ELK技术实战-安装Elk 5.x平台
  20. Ball CodeForces - 12D (线段树)

热门文章

  1. TypeScript完全解读(26课时)_1.TypeScript完全解读-开发环境搭建
  2. E. Similarity of Subtrees【hash】
  3. laravel MVC分布及数据库配置
  4. docker+jenkins实现持续集成
  5. python文件实现增删改查操作
  6. POJ1129(贪心)
  7. re 模块的重新整理
  8. box-shadow四周阴影
  9. ruby 正则匹配返回值matchdata
  10. net core 在docker(ubuntu)部署