前言
突然发现到了新的一年什么东西好像就都不会了凉凉
算法步骤
- 建残量网络图
- 在残量网络图上跑增广路
- 重复1直到没有增广路(注意一个残量网络图要尽量把价值都用完,不然会浪费建图的时间)
代码实现
#include #include #include #include #include #include #include #include
当前弧优化
考虑我们在dfs搜索的时候,是不是有什么东西重复了?
显然搜索过的就不可能再来了(因为已经被
压榨干净了)
然后就可以修改一些dfs的过程。
int dfs(int u,int Flow){ if(u==t || !Flow)return Flow; for(int &i=cur[u];i!=-1;i=nxt[i]){ int v=to[i]; if(dep[v]==dep[u]+1 && w[i]){ int di=dfs(v,min(Flow,w[i])); if(di){ w[i]-=di;w[i^1]+=di; return di; } } } return 0;}void Dinic(){ while(bfs()){ for(int i=1;i<=n;i++)cur[i]=front[i]; while(int d=dfs(s,Inf)){ flow+=d; } }}
优化还是比较明显的。
大家可以在看完之后切了
当然陆续将会推出HLPP与ISAP的总结。