const int N=210;
const int M=40010*2;
const int inf=0x3f3f3f3f;
struct Edge
{
int v,cap,nxt;
}e[M];
int src,des,dis[N],head[N],ecnt;
int n,m;
void Addedge(int u,int v,int w)
{
e[ecnt].v=v;
e[ecnt].cap=w;
e[ecnt].nxt=head[u];
head[u]=ecnt++;
e[ecnt].v=u;
e[ecnt].cap=0;
e[ecnt].nxt=head[v];
head[v]=ecnt++;
}
bool Bfs()
{
queue<int>q;
q.push(src);
memset(dis,-1,sizeof(dis));
dis[src]=0;
while(!q.empty())
{
int u=q.front();q.pop();
for(int i=head[u];~i;i=e[i].nxt)
{
int v=e[i].v;
if(e[i].cap>0&&dis[v]==-1)
{
dis[v]=dis[u]+1;
q.push(v);
}
}
}
return dis[des]>=0;
}
int Dfs(int u,int a)
{
if(u==des) return a;
for(int i=head[u];~i;i=e[i].nxt)
{
int v=e[i].v,t=0;
if(e[i].cap>0&&dis[v]==dis[u]+1&&(t=Dfs(v,min(a,e[i].cap))))
{
e[i].cap-=t;
e[i^1].cap+=t;
return t;
}
}
dis[u]=-1;
return 0;
}
int Dinic()
{
int ans=0;
while(Bfs())
{
int t=0;
while(t=Dfs(src,inf)) ans+=t;
}
return ans;
}
最大流Dinic模板
最新推荐文章于 2023-05-06 20:11:22 发布