#include<iostream>
#include<cstdio>
#include<queue>
#include<cstring>
#define MAX 202
using namespace std;
int flow[MAX][MAX],dis[MAX];
int m,n,a,b,c;
bool bfs(int s,int t)
{
queue<int> q;
q.push(s);
memset(dis,0,sizeof(dis));
dis[s]=1;
while(!q.empty())
{
int now=q.front();
q.pop();
for(int i=s+1;i<=t;i++)
{
if(flow[now][i]>0&&!dis[i])
{
dis[i]=dis[now]+1;
q.push(i);
}
}
}
if(dis[n]>0)return 1;
return 0;
}
int dfs(int x,int f)
{
int t;
if(x==n)return f;
for(int i=1;i<=n;i++)
{
if(flow[x][i]>0&&dis[i]==(dis[x]+1)&&(t=dfs(i,min(f,flow[x][i]))))
{
flow[x][i]-=t;
flow[i][x]+=t;
return t;
}
}
return 0;
}
int main()
{
while(scanf("%d%d",&m,&n)!=EOF)
{
memset(flow,0,sizeof(flow));
while(m--)
{
scanf("%d%d%d",&a,&b,&c);
flow[a][b]+=c;
}
int ans=0;
while(bfs(1,n))
{
int u;
while(u=dfs(1,999999999))ans+=u;
}
printf("%d\n",ans);
}
return 0;
}
dinic模板 邻接矩阵
最新推荐文章于 2022-02-22 12:32:25 发布