讨论 / 帮忙看看哪儿错了,谢谢
lsg950806 2012-05-09 08:00:00
点我顶贴 收藏 删除
var

map,link,f:array [1..200,1..200] of integer;

v,c,u:array [1..200] of integer;

n,m,a,b,i,j,k,p,s:integer;

begin

fillchar(map,sizeof(map),0);

fillchar(link,sizeof(link),0);

fillchar(v,sizeof(v),0);

fillchar(f,sizeof(f),0);

fillchar(c,sizeof(c),0);

p:=0;

readln(n,m);

for i:=1 to n do

readln(c[i],u[i]);

for i:=1 to m do

begin

readln(a,b,f[a,b]);

map[a,b]:=1;

v[b]:=v[b]+1;

end;

i:=0;

link:=map;

while (i<n) do

begin

j:=1;

while (v[j]<>0) do inc(j);

v[j]:=-1;

if (c[j]-u[j])<>0 then

begin

c[j]:=c[j]-u[j];

s:=0;

for k:=1 to n do

if link[j,k]=1 then

begin

c[k]:=c[k]+c[j]*f[j,k];

dec(v[k]);

link[j,k]:=0;

s:=s+1;

end;

if (s=0)and(c[j]>0) then

begin

writeln(j,' ',c[j]);

p:=1;

end;

end;

inc(i);

end;

if p=0 then writeln('NULL');

end.

#1 rollaroll@2012-05-09 08:00:00
回复 删除
额……懒得看程序,要注意输入层不用减阀值,最后输出的是C[i]>0的输出层节点,判断节点在不在输出层直接判断出度是不是为0就可以了。话说这题很坑爹的……
查看更多回复
提交回复