您的位置:首页 > 其它

poj1273 2010.2.17

2016-02-05 14:17 218 查看
poj1273 2010.2.17

wa因:

1. while(scanf("%d%d",&m,&n)!=EOF)

{

memset(mat,0,sizeof(mat));

for(i=0;i<m;i++)

{

scanf("%d%d%d",&a,&b,&c);

mat[a][b]+=c;//处理两点之间的多条边

}

printf("%d\n",Edmonds_Karp(1,n));

}

2. “The input includesseveral cases”漏掉了这句话,以为只有一组数据

#include <cstdio>
#include <cstring>
#include <queue>

using namespace std;

#define MAXN 400+10
#define INF 1000000000

int flow[MAXN][MAXN],cap[MAXN][MAXN],a[MAXN],p[MAXN];
int n,s,t,m,f;

void edmondskarp();

void edmondskarp()
{
queue<int> q;
memset(flow,0,sizeof(flow));
f=0;
for(;;)
{
memset(a,0,sizeof(a));
a[s]=INF;
q.push(s);
while (!q.empty())
{
int u=q.front();
q.pop();
for(int v=1;v<=n;v++)
if (!a[v]&&cap[u][v]>flow[u][v])
{
p[v]=u;
q.push(v);
if (a[u]<cap[u][v]-flow[u][v])
a[v]=a[u];
else a[v]=cap[u][v]-flow[u][v];
}
}
if(a[t]==0) break;
for(int u=t;u!=s;u=p[u])
{
flow[p[u]][u]+=a[t];
flow[u][p[u]]-=a[t];
}
f+=a[t];
}
}

int main()
{
while (scanf("%d %d",&m,&n)!=EOF)
{
int i,t1,t2,t3;
s=1;
t=n;
memset(cap,0,sizeof(cap));
for(i=1;i<=m;i++)
{
scanf("%d %d %d",&t1,&t2,&t3);
cap[t1][t2]+=t3;
}
edmondskarp();
printf("%d\n",f);
}
//		printf("\n");
//		for(i=1;i<=n;i++)
//			printf("%d    %d\n",i,a[i]);
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: