Section 6

master
大蒟蒻 9 years ago
parent 78b43fa180
commit 7ec21d14de

@ -48,8 +48,8 @@ int ISAP(int S, int T)
}
bool needRetreat = true;
for (int e = cur[x]; needRetreat && ~e; e = nxt[e])
if (cap[e] && dis[x] == dis[to[e]] + 1)
needRetreat = false, cur[x] = e, fa[x = to[e]] = e;
if (cur[x] = e, cap[e] && dis[x] == dis[to[e]] + 1)
needRetreat = false, fa[x = to[e]] = e;
if (needRetreat)
{
int nd = N - 2;

@ -35,9 +35,10 @@ int dinic(const int u, int rest)
if (u == n) return rest;
int flow = 0;
for (int e = cur[u], curFlow; rest && ~e; e = nxt[e])
if (cap[e] && dis[u] == dis[to[e]] - 1)
if (cur[u] = e, cap[e] && dis[u] == dis[to[e]] - 1)
if ((curFlow = dinic(to[e], min(cap[e], rest))))
rest -= curFlow, flow += curFlow, cap[e] -= curFlow, cap[e ^ 1] += curFlow, cur[u] = e;
rest -= curFlow, flow += curFlow,
cap[e] -= curFlow, cap[e ^ 1] += curFlow;
if (rest) dis[u] = inf;
return flow;
}

@ -489,7 +489,7 @@ Manacher 模板题
\paragraph{ISAP} 我经常使用ISAP因为据说这玩意更稳定由于我的脸黑我怕碰上一些恶心的数据卡掉Dinic并且目前没有一道普通网络流的题能卡掉ISAP。以下还是上面那道题。
\codeinput[\href{http://poj.org/problem?id=1273}{POJ1273} - Drainage Ditches (ISAP)]{assets/day6/poj1273_ISAP.cpp}
重新写了一遍1A我很高兴。ISAP比Dinic要注意的点真是多多了注意第58行的break这可以大大加速因为此时源点和汇点已经不会联通了继续做下去无益。反正我觉得ISAP要是能一遍写出来的话是比Dinic好的。
\subsection{最小费用最大流}
每次找到一条最短的路增广大体上与Dinic完全相同不过总感觉很奇怪包括没有了cur多出了vis等一些不同并且不加就会爆炸。
\subsection{最小费用最大流} 每次找到一条最短的路增广大体上与Dinic完全相同不过总感觉很奇怪包括没有了cur多出了vis等一些不同并且不加就会爆炸。
\codeinput[\href{http://poj.org/problem?id=2135}{POJ2135} - Farm Tour]{assets/day6/poj2135.cpp}
\paragraph{后记} 我多次尝试直接移植dinic的模板来解决最小费用最大流问题不过最后都只是收获了一个个RE看来直接照抄dinic的代码是不行的仍然要加上vis数组之类的东西来保证不会爆栈虽然我觉得我的移植代码也不会爆栈如果哪名巨佬在Review我的代码时发现了方法请不吝告知蒟蒻万分感谢。
\end{document}
Loading…
Cancel
Save