您的位置:首页 > 其它

joj 1169

2011-09-16 20:12 197 查看
这道题着实让我蛋疼了一下,看完书上的代码之后信心满满还稍微修改了一下方法来做这道题,结果wa的暗无天日,后来猛然想到oj的测试数据不一定一半是零,然后感觉样例输入果然很坑人,然后AC:

#include<iostream>

#include<stdio.h>

#include<queue>

using namespace std;

int cap[32][32];

int flow[32][32];

int a[32];

int p[32];

int main()

{

int n;

while(scanf("%d",&n),n)

{

memset(flow,0,sizeof(flow));

memset(cap,0,sizeof(cap));

int i,j;

int f=0;

for(i=1;i<=n;i++)

for(j=1;j<=n;j++)

{

int m;

scanf("%d",&m);

cap[i][j]+=m;

cap[j][i]+=m;

flow[j][i]+=m;

}

if(n==1)

printf("Maximum number of goods: 0.\n");

int flag=0;

while(1)

{

memset(a,0,sizeof(a));

a[1]=2147483647;

queue<int> q;

q.push(1);

while(!q.empty())

{

int k=q.front();

q.pop();

for(i=1;i<=n;i++)

if(a[i]==0&&cap[k][i]>flow[k][i])

{

p[i]=k;

q.push(i);

a[i]=((a[k]<(cap[k][i]-flow[k][i]))?a[k]:(cap[k][i]-flow[k][i]));

}

}

if(a
==0)

break;

for(i=n;i!=1;i=p[i])

{

flow[p[i]][i]+=a
;

flow[i][p[i]]-=a
;

}

f+=a
;

}

printf("Maximum number of goods: %d.\n",f);

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: