最大流的第一道题,刚开始学这玩意儿,感觉好难啊!哎·····
希望慢慢地能够理解一点吧!
#include<stdio.h>
#include<string.h>#include<queue>
using namespace std;
#define inf 1000000
#define min(a,b) a<b?a:b
int map[210][210],pre[210],maxf[210];
int n,m;
int bfs()//搜索,截止找不到增广路
{
int i;
queue<int>q;
for(i=0;i<=m;i++)
{
maxf[i]=inf;
pre[i]=-1;
}
pre[1]=0;
q.push(1);
while(!q.empty())
{
int qian=q.front();
q.pop();
int hou;
for(hou=1;hou<=m;hou++)
{
if(map[qian][hou]&&pre[hou]==-1)
{
pre[hou]=qian;
maxf[hou]=min(maxf[qian],map[qian][hou]);
q.push(hou);
}
}
}
if(pre[m]==-1)return 0;
return maxf[m];
}
int ek()//更新与修复
{
int max=0,kejia;
while(kejia=bfs())
{
max+=kejia;
int index=m,qian;
while(index!=1)
{
qian=pre[index];
map[qian][index]-=kejia;
map[index][qian]+=kejia;
index=qian;
}
}
return max;
}
int main()
{
int i,u,v,w,ans;
while(scanf("%d%d",&n,&m)!=EOF)
{
memset(map,0,sizeof(map));
for(i=0;i<n;i++)
{
scanf("%d%d%d",&u,&v,&w);
map[u][v]+=w;
}
ans=ek();
printf("%d\n",ans);
}
return 0;
}