單向圖
題目鏈結請點這裡
#include//每次找費用的最短路,更新殘留網路圖直到找不到最短路為止
#include//最大費用 權值取負值 結果取負值
#include
#include
#include
using
namespace
std;
const
int inf=0x3f3f3f3f;
struct node
node[1001000];
int head[1001000],cont,sumflow;
int vis[101000],dist[101000];
int pre[101000];
void init()
void add(int u,int v,int w,int cost)//建圖
}node[cont].u=u,node[cont].v=v;
node[cont].w=w,node[cont].cost=cost;
node[cont].next=head[u],head[u]=cont++;
node[cont].u=v,node[cont].v=u;
node[cont].w=0,node[cont].cost=-cost;//反向邊費用為負的
node[cont].next=head[v],head[v]=cont++;
}int spfa(int st,int ed)//尋找最短路
dist[st]=0;
vis[st]=1;
q.push(st);
while(!q.empty())}}
}if(dist[ed]==inf) return
0;//找不到最短路
return1;}
int mcmf(int st,int ed)
mincost+=dist[ed]*mins;//每次找到最短路後更新最小費用
flow+=mins;//更新最大流
}sumflow=flow;//最大流
return mincost;
}int main()
for(int i=0; iint a,b,c;
scanf("%d%d%d",&a,&b,&c);
add(a,b+n,1,c);
}int ans=mcmf(st,ed);//最小費用最大流
printf("%d\n",ans);
}return
0;}
雙向圖
題目鏈結
#include//每次找費用的最短路,更新殘留網路圖直到找不到最短路為止
#include//最大費用 權值取負值 結果取負值
#include
#include
#include
using
namespace
std;
const
int inf=0x3f3f3f3f;
struct node
node[1001000];
int head[1001000],cont,sumflow;
int vis[101000],dist[101000];
int pre[101000];
void init()
void add(int u,int v,int w,int cost)//建圖
return ;}}
node[cont].u=u,node[cont].v=v;
node[cont].w=w,node[cont].cost=cost;
node[cont].next=head[u],head[u]=cont++;
node[cont].u=v,node[cont].v=u;
node[cont].w=0,node[cont].cost=-cost;//反向邊費用為負的
node[cont].next=head[v],head[v]=cont++;
}int spfa(int st,int ed)//尋找最短路
dist[st]=0;
vis[st]=1;
q.push(st);
while(!q.empty())}}
}if(dist[ed]==inf) return
0;//找不到最短路
return1;}
int mcmf(int st,int ed)
mincost+=dist[ed]*mins;//每次找到最短路後更新最小費用
flow+=mins;//更新最大流
}sumflow=flow;//最大流
return mincost;
}int main()
for(int i=0; iint a,b,c;
scanf("%d%d%d",&a,&b,&c);//雙向邊
add(a,b+n,1,c);
add(b,a+n,1,c);
}int ans=mcmf(st,ed);//最小費用最大流
printf("case %d: ",++z);
if(sumflow!=n)
printf("no\n");
else
printf("%d\n",ans);
}return
0;}
最小費用流
include include define maxn 61 define maxv maxn maxn 2 1 define maxe maxv 5 define oo 2147483647 define min a,b a b b a define maxq maxe using namespa...
最小費用流
int v 頂點數 vector g max v int dist max v 最短距離 int prev max v 最短路中前驅結點對應的點 int pree max v 最短路中前驅結點對應的邊 void addedge int from,int to,int cap,int cost 求從s...
最小費用流
acm模版 最小費用流 o v e f init network g g.build v,e call g.mincost s,t flow g.flow cost g.cost 注意 spfa增廣,實際複雜度遠遠小於o v e define typef int type of flow defin...