最小费用流算法模板--SPFA(邻接表)
2013-10-15 15:03
337 查看
//最小费用流 struct edge{ int x,y,f,c,nxt; }e[E]; int en,head ,pre ,dist ,visited ; void add(int x,int y,int f,int c){ e[en].x=x; e[en].y=y; e[en].f=f; e[en].c=c; e[en].nxt=head[x]; head[x]=en++; } void addedge(int x,int y,int f,int c){ add(x,y,f,c); add(y,x,0,-c); } bool spfa(int s,int t,int n){ int i,v,cur; queue<int> q; for(i=0;i<n;i++){ pre[i]=-1; visited[i]=false; dist[i]=inf; } visited[s]=true; dist[s]=0; q.push(s); while(!q.empty()){ cur=q.front(); q.pop(); visited[cur]=false; for(i=head[cur];i!=-1;i=e[i].nxt) if(e[i].f){ v=e[i].y; if(dist[v]>dist[cur]+e[i].c){ dist[v]=dist[cur]+e[i].c; pre[v]=i; if(!visited[v]){ visited[v]=true; q.push(v); } } } } return dist[t]!=inf; } int cost(int s,int t,int n){ int i,flow=inf,ans=0; while(spfa(s,t,n)){ ans+=dist[t]; for(i=pre[t];i!=-1;i=pre[e[i].x]) flow=min(flow,e[i].f); for(i=pre[t];i!=-1;i=pre[e[i].x]){ e[i].f-=flow; e[i^1].f+=flow; } } return ans; }
相关文章推荐
- 单源最短路 SPFA 算法模板
- 最小费用流算法模板
- spfa求最短路模板(邻接表)
- SPFA模板(邻接表)
- spfa ,就邻接表建图模板
- 模板--Floyd Dijkstra Bellman-Ford spfa 四种最短路经典算法
- POJ2135 - Farm Tour(最小费用流 + 模板 + SPFA + Dijstra)
- SPFA,dijskra,prime,topu四种算法的模板
- 最短路【SPFA】算法模板
- Hihocoder 之 #1097 : 最小生成树一·Prim算法 (用vector二维 模拟邻接表,进行prim()生成树算法, *【模板】)
- spfa 算法模板
- 最短路径算法Dijkstra && SPFA && Floyd 代码实现模板
- 一个我认为比较好的Spfa模板(使用邻接表和队列实现)
- 最短路 + 邻接表 + 堆优化(模板)(Dijkstra + SPFA)
- 单元最短路径算法模板汇总(Dijkstra, BF,SPFA),附链式前向星模板
- 【算法系列学习】SPFA邻接表最短路 [kuangbin带你飞]专题四 最短路练习 F - Wormholes
- HDU 2544(最短路径 SPFA 算法模板)
- EK(BFS)求最大流的算法模板(邻接表)
- HDU 2544 最短路 floyd djkstra(邻接表,邻接矩阵) spfa bellman-ford 模板题
- HDU 2544 最短路 SPFA 邻接表 模板