讨论 / Wa:50,,,求助。。。
rgb456rgb 2012-02-11 06:36:00
点我顶贴 收藏 删除
#include<stdio.h>

#include<stdlib.h>

int a[650][650],aa[650][650],i,j,k,m,n,mi,b[650],c[650],d[650],e[650],t,t1,t2,t3,t4,r,f,kt,st,fl,dl[60000];

int min(int a,int b){

int t;

if (a<b) t=a; else t=b;

return t;

}

int main(){

scanf("%d%d",&n,&m);

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

for (j=1;j<=m;j++){

t1=(i-1)*m+j;

//printf("%d %d\n",i,j);

scanf("%d",&t);

b[t1]=t;

if (j!=1) {a[t1-1][0]++;t2=a[t1-1][0];a[t1-1][t2]=t1;c[t1]++;}

scanf("%d",&t);

for (k=1;k<=t;k++){

scanf("%d%d",&t2,&t3);

t2++;t3++;

t2=(t2-1)*m+t3;

a[t2][0]++;a[t2][a[t2][0]]=t1;

c[t1]++;

}

}}

t4=0;

n*=m;fl=1;

while (t4<n&&fl==1){

fl=0;

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

if (c[i]==0){

fl=1;

c[i]=-1;d[i]=1;

for (j=1;j<=a[i][0];j++){

c[a[i][j]]--;

}

t4++;

}}}

t4=0;

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

if (d[i]==1){

t4++;e[t4]=i;

}}

st=0;

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

if (d[i]==1){ t1=e[i];

// printf("%d\n",i);

if (b[i]>0) {aa[0][t1]=b[i];st+=b[i];} else {

if (b[i]<0) {aa[t1][t4+1]=-b[i];}

}

for (j=1;j<=a[i][0];j++){

t=a[i][j];

// printf("%d ",a[i][j]);

if (d[t]==1) {t=e[t];

aa[t1][t]=99999999;}

}

//printf("\n");

}

}

//system("pause");

t4++;

for (i=0;i<=t4;i++){

for (j=0;j<=t4;j++){

a[i][j]=0;

}

}

//标号

f=1;r=1;

for (i=0;i<=n;i++){

d[i]=0;c[i]=0;

}

n=t4;d[n]=1;dl[1]=n;

while (f<=r){

kt=r;

for (i=f;i<=r;i++){

t1=dl[i];

for (j=0;j<n;j++){

if (aa[j][t1]!=0){

if (d[j]==0){kt++;dl[kt]=j;d[j]=d[t1]+1;}

}

}

}

f=r+1;r=kt;

}

f=1;r=0;

for (i=1;i<=t4;i++){

if (aa[0][i]!=0){

c[i]=aa[0][i];a[0][i]=aa[0][i];a[i][0]=-aa[0][i];

r++;dl[r]=i;

}}

//for (i=0;i<=n;i++)

// printf("%d ",d[i]);

//printf("\n");

//system("pause");

//下为预流推进

d[0]=n+2;

while (f<=r){

kt=r;

for (i=f;i<=r;i++){

t1=dl[i];

while (c[t1]>0){

for (j=0;j<=n;j++){

if (a[t1][j]<aa[t1][j]&&d[j]==d[t1]-1){

t3=aa[t1][j]-a[t1][j];

if (t3>c[t1]) t3=c[t1];

a[t1][j]+=t3;a[j][t1]-=t3;c[t1]-=t3;

c[j]+=t3;

if (j!=n&&j!=0) {kt++;dl[kt]=j;}

// printf("%d %d\n",j,t3);

}

}

if (c[t1]>0){

mi=99999999;

for (j=0;j<=n;j++){

if (a[t1][j]<aa[t1][j])

mi=min(mi,d[j]);

}

d[t1]=mi+1;

}

// printf("%d %d %d %d %d\n",c[t1],t1,d[t1],aa[4][5],n);

// system("pause");

}

//system("pause");

}

f=r+1;r=kt;

//printf("%d %d\n",f,r);

}

st-=c[n];

printf("%d\n",st);

//system("pause");

}

wa:50,,,,后4个点全wa,不知原因,想问下哪里写错了。

#1 rgb456rgb@2012-02-11 06:36:00
回复 删除

木有人帮忙么。。。

查看更多回复
提交回复