int n, g[maxn][maxn], dis[maxn], vd[maxn];
int dfs(int u, int flow)
{
int temp, v, delta;
if(u==n)return flow;
delta=0;
for(v=1; v<=n; v++)
{
if(g[u][v]>0&&dis[u]==dis[v]+1)
{
temp=dfs(v, Min(flow-delta, g[u][v]));
g[u][v]-=temp;
g[v][u]+=temp;
delta+=temp;
if(delta==flow||dis[1]>=n)return delta;
}
}
if(dis[1]>=n)return delta;
vd[dis[u]]--;
if(vd[dis[u]]==0)dis[1]=n;
dis[u]++;
vd[dis[u]]++;
return delta;
}
int main()
{
while(dis[1]<n)
{
ans+=dfs(1, inf);
}
printf("%d", ans);
return 0;
}
sap模板
最新推荐文章于 2024-07-13 09:58:43 发布