Pagini recente » Cod sursa (job #598661) | Cod sursa (job #50515) | Cod sursa (job #2782500) | Cod sursa (job #2870319) | Cod sursa (job #6999)
Cod sursa(job #6999)
Program radiatie;
type adresa=^nod; nod=record inf:integer; lung:longint; passed:boolean; adr:adresa; end;
var l:array[1..30000] of adresa;
f,g:text;
i,j,n,nc,m,k,a,b,dest,caut, maxmin:integer;
c:longint;
st:array[1..30000] of integer;
s:array[1..30000]of 0..1;
Procedure ad_nod(x,y:integer;lng:longint);
var a:adresa;
begin
new(a);
a^.adr:=l[x]; a^.inf:=y; a^.lung:=lng;
l[x]:=a;
new(a);
a^.adr:=l[y]; a^.inf:=x; a^.lung:=lng;
l[y]:=a;
end;
function lungime(a,b:integer):longint;
var aD:adresa;
begin
aD:=L[A];
while ad<>nil do begin
if ad^.inf=b then
begin lungime:=ad^.lung; break; end
else ad:=ad^.adr;
end;
end;
function maxim(nr:integer):longint;
var i:integer; max,lth:longint;
begin
max:=0;
for i:=1 to nr-1 do begin
lth:=lungime(st[i],st[i+1]);
if lth>max then max:=lth;
end;
maxim:=max;
end;
Procedure initpassed;
var a:adresa;q:integer;
begin
for q:=1 to n do
begin
a:=l[q];
while a<>nil do begin
a^.passed:=true;
a:=a^.adr;
end;
end;
end;
Procedure df(p:integer);
var a:adresa; lth:longint;
begin
s[p]:=1;
nc:=nc+1;
st[nc]:=p;
if p=caut then begin lth:=maxim(nc); if lth<maxmin then maxmin:=lth; end
else begin
a:=l[p];
while a<>nil do begin
if (s[a^.inf]=0) and a^.passed then
begin
a^.passed:=false;
df(a^.inf);
end;
a:=a^.adr;
end;
end;
nc:=nc-1;
s[p]:=0;
end;
begin
assign(f,'radiatie.in'); reset(f);
assign(g,'radiatie.out'); rewrite(g);
readln(f,n,m,k);
for i:=1 to n do l[i]:=nil;
for i:=1 to m do begin
readln(f,a,b,c);
ad_nod(a,b,c);
end;
for i:=1 to k do begin
readln(f,dest,caut);
initpassed;
maxmin:=9999;
for j:=1 to k do begin st[i]:=0; s[i]:=0; end;
df(dest);
writeln(g,maxmin);
end;
close(f);
close(g);
end.