费用流板子
Posted starve_to_death
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了费用流板子相关的知识,希望对你有一定的参考价值。
bool spfa(){ queue<int>que; que.push(s); memset(dis,INF,sizeof(dis)); dis[s]=0; while(!que.empty()){ int u=que.front(); que.pop(); vis[u]=0; for(int i=head[u];~i;i=edge[i].nextt){ int v=edge[i].v; if(edge[i].w&&dis[v]>dis[u]+edge[i].cost){ dis[v]=dis[u]+edge[i].cost; if(!vis[v]) que.push(v),vis[v]=1; } } } return dis[t]!=INF; } int dfs(int u,int fl){ if(u==t){ return fl; } int ans=0; vis[u]=1; for(int i=cur[u];~i;i=edge[i].nextt){ int v=edge[i].v; if(!vis[v]&&edge[i].w&&dis[v]==dis[u]+edge[i].cost){ cur[u]=i; int x=dfs(v,min(fl-ans,edge[i].w)); ans+=x; edge[i].w-=x; edge[i^1].w+=x; mincost+=x*edge[i].cost; if(ans==fl) break; } } vis[u]=0; return ans; } void MCMF(){ while(spfa()){ for(int i=0;i<=t;i++) cur[i]=head[i]; dfs(s,INF); } }
以上是关于费用流板子的主要内容,如果未能解决你的问题,请参考以下文章