Professional Documents
Culture Documents
Tramvai - Pascal
Tramvai - Pascal
70/5 }
{$M 60000,0,655360}
program P01;
label fin;
var f:text;
i1,j1,i,j,k,m,n,s,p,ncomp,puti,putj,l1i,l1j,l2i,l2j,nmetr,ntram:integer;
cda,cnu:array[1..100,1..100] of integer;
mcrit,tram:array[1..100,1..100] of byte;
cost:longint;
maxdf,nrdf:array[0..100] of integer;
vizit:array[1..100] of boolean;
compon,comp2:array[1..100] of byte;
metrou,link:^matr;
ok1,ok2,cdone:boolean;
procedure df(nod,tata:integer);
var s:integer;
max:integer;
begin
nrdf[nod]:=nrdf[tata]+1;
maxdf[nod]:=nrdf[nod];
vizit[nod]:=true;
for s:=1 to n do
if (tram[nod,s]=1) then begin
then maxdf[nod]:=nrdf[s];
df(s,nod);
end;
end;
max:=101;
mcrit[nod,s]:=1;
mcrit[s,nod]:=1;
end;
end;
end;
end;
procedure cautacomp(nod:integer);
var s:integer;
begin
comp2[nod]:=1;
vizit[nod]:=true;
for s:=1 to n do
begin
assign(f,'tramvai.in');
reset(f);
readln(f,n,s);
for i:=1 to n do
cda[i,j]:=-1000;
cnu[i,j]:=-1000;
end;
readln(f,i,j,cnu[i,j],cda[i,j]);
cnu[j,i]:=cnu[i,j];
cda[j,i]:=cda[i,j];
end;
close(f);
cost:=0;
mcrit[i,j]:=0;
cost:=cost+cnu[i,j];
tram[i,j]:=1;
tram[j,i]:=1;
end
else begin
tram[i,j]:=0;
tram[j,i]:=0;
end;
end;
nrdf[0]:=0;
ncomp:=0;
vizit[i]:=false;
compon[i]:=0;
end;
cdone:=false;
for i:=1 to n do
inc(ncomp);
df(i,0);
end;
cdone:=true;
new(metrou);
new(link);
nmetr:=0;
for i:=1 to n do
metrou^[i,j]:=0;
else link^[i,j]:=0;
end;
for k:=1 to ncomp do begin
for i:=1 to n do
if (compon[i]=k) then
for j:=1 to n do
if compon[j]=k then
tram[i,j]:=0;
tram[j,i]:=0;
cost:=cost+(cda[i,j]-cnu[i,j]);
df(i,0);
end
else begin
ok1:=false;
ok2:=false;
vizit[i1]:=false;
comp2[i1]:=0;
end;
tram[i,j]:=0;
tram[j,i]:=0;
cautacomp(i);
for j1:=1 to n do
if (comp2[j1]=1) and (compon[j1]=compon[i]) then
for i1:=1 to n do
l1i:=i1;
l2i:=j1;
ok1:=true;
break;
end;
for j1:=1 to n do
for i1:=1 to n do
l1i:=i1;
l2i:=j1;
ok1:=true;
break;
end;
end;
for j1:=1 to n do
for i1:=1 to n do
l1j:=i1;
l2j:=j1;
ok2:=true;
break;
end;
for j1:=1 to n do
for i1:=1 to n do
l1j:=i1;
l2j:=j1;
ok2:=true;
break;
end;
end;
end;
cost:=cost+(cda[i,j]-cnu[i,j]);
metrou^[l2i,l1i]:=1;metrou^[l1i,l2i]:=1;
end;
metrou^[l2j,l1j]:=1;metrou^[l1j,l2j]:=1;
end;
df(i,0);
end
else begin
tram[i,j]:=1;
tram[j,i]:=1;
end;
end;
end;
end;
repeat
ok1:=true;
for i:=1 to n do
for j:=1 to n do
l1i:=compon[j];
for k:=1 to n do
compon[k]:=compon[i];
ok1:=false;
end;
end;
until ok1;
for i:=1 to n do
if (compon[i]<>k) then
for j:=1 to n do
metrou^[i,j]:=1;
metrou^[j,i]:=1;
goto fin;
end;
fin:
end;
assign(f,'tramvai.out');
rewrite(f);
writeln(f,cost);
ntram:=0;
nmetr:=0;
end;
writeln(f,ntram);
for j:=i+1 to n do
writeln(f,nmetr);
for j:=i+1 to n do
close(f);
end.