题意:1是源点,m是汇点,求出来最大流量,没什么好说的就是练习最大流的模板题
**************************************************************
先用Edmonds-Karp的算法做一下试试吧
重边贡献了 1W,要加上所有的重边才算是两点间最大流量
***********************************************************************************************************************
;
; i<=M; i++)
{
;
; i<=N; i++)
{
scanf(, M));
}
;
}
邻接表实现
***********************************************************************************************************************
;
];
, ;
}
, ; i=e[i].next)
{
;
)
{
MinFlow = min(MinFlow, e[v].Flow);
v = pre[e[v].u];)
{
e[v].Flow -= MinFlow;
e[v^].Flow += MinFlow;
v = pre[e[v].u];
}
}
; i<=N; i++)
{
scanf();, M));
}
;
}
code
Dinic实现
************************************************************************************************************************
#include<;
;
};queue<, ;
; i=edge[i].next)
{
;
Q.push(v);
}
}
}
;; i=edge[i].next)
{
== layer[u] && flow)
{
flow = min(MaxFlow-uFlow, flow);
flow = dfs(v, flow);
edge[i].flow -= flow;
edge[i^].flow += flow;
uFlow += flow;
;
, End = M, cnt = ;
memset(Head, -, ; i<=N; i++)
{
scanf();
}
printf(;
}
SAP实现
*************************************************************************************************************************
#include<;
;
, , , gap[] = ;
; j=edge[j].next)
{
)
{
Layer[v] = Layer[u] + ;
gap[Layer[v]]++;
Q.push(v);
}
}
}
}
, u = start, MaxFlow=;
BFS();
memcpy(cur, Head, ; j<top; j++)
{
; j<top; j++)
{].flow += MinFlow;
}
MaxFlow += MinFlow;
top = location;] == )
; j=edge[j].next)
{ && edge[j].flow)
)
{; j=edge[j].next)
{;;
gap[Layer[u]] += ;
, End = M, cnt = ;
memset(Head, -, ; i<=N; i++)
{
scanf();
}
printf(;
}