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
25964
回复
删除
额……懒得看程序,要注意输入层不用减阀值,最后输出的是C[i]>0的输出层节点,判断节点在不在输出层直接判断出度是不是为0就可以了。话说这题很坑爹的……