今天学的网络流,总的感觉来说稍难,不管是理解还是什么,但是理解了后,就变得简单许多。
Ford-fulkerson算法 是来求最大流量问题,从源点出发,到汇点,到底能多少能流入汇点。
算法: 1、从源点出发,找相邻边,如果相邻边未被找过并且还可以流入流量就DFS。
2、更新流入的边。
3、重复操作,直到没有新的到达汇点的边可以流入为止。
代码:
int dfs(int s,int t,int f)
{
if(s==t) return f;
vis[s]=1;
for(int i=v[s];i!=-1;i=arcnum[i].next)
{
int b=arcnum[i].go;
if(!vis[b] && arcnum[i].d>0)
{
int w=dfs(b,t,min(f,arcnum[i].d));
if(w>0)
{
arcnum[i].d-=w;
arcnum[i^1].d+=w;
return w;
}
}
}
return 0;
}
建图: 如果一个图中有多个源点和汇点,就设立一个超级源点 与所有源点相连,各边容量为本来自边容量和超级汇点,一样。这样就化为标准的最大流问题来化解。