Cod sursa(job #8838)
Utilizator | Data | 25 ianuarie 2007 18:23:15 | |
---|---|---|---|
Problema | Radiatie | Scor | 0 |
Compilator | fpc | Status | done |
Runda | Arhiva de probleme | Marime | 6.47 kb |
program radiatie;
type rad=record
x,y,c:longint;
end;
var f,g:text;
n,m,k,x,y,maxim:longint;
v,vu:array[1..30000] of rad;
l:array[1..15001] of longint;
viz:array[1..15001] of longint;
procedure iofile;
var i,j,x,y,c:longint;
begin
assign(f,'radiatie.in');
reset(f);
assign(g,'radiatie.out');
rewrite(g);
readln(f,n,m,k);
for i:=1 to m do
begin
readln(f,v[i].x,v[i].y,v[i].c);
end;
end;
procedure pozitie(var m:longint;p,u:longint);
var di,dj,i,j,aux:longint;
aux1:rad;
begin
di:=0;
dj:=-1;
i:=p;
j:=u;
while i<j do
begin
if v[i].c>v[j].c then
begin
aux:=di;
di:=-dj;
dj:=-aux;
aux1:=v[i];
v[i]:=v[j];
v[j]:=aux1;
end;
i:=i+di;
j:=j+dj;
end;
m:=i;
end;
procedure quick(p,u:longint);
var m:longint;
begin
if p<u then
begin
pozitie(m,p,u);
quick(p,m-1);
quick(m+1,u);
end;
end;
procedure kruskal;
var i,nr,e1,e2,j:longint;
begin
nr:=1;
quick(1,m);
for i:=1 to n do
l[i]:=i;
i:=2;
vu[nr]:=v[1];
while (nr<n-1)and(i<=m) do
begin
if l[v[i].x]<>l[v[i].y] then
begin
inc(nr);
e1:=l[v[i].x];
e2:=l[v[i].y];
vu[nr]:=v[i];
for j:=1 to n do
if l[j]=e2 then
l[j]:=e1;
end;
inc(i);
end;
end;
function max1(x,y:longint):longint;
begin
if x>y then max1:=x else max1:=y;
end;
{function maxim(x,y:longint):longint;
var viz:array[1..10000] of byte;
p,u,i,k,max:longint;
c:array[1..10000] of longint;
begin
p:=1;
u:=1;
c[p]:=x;
fillchar(viz,sizeof(viz),0);
viz[x]:=1;
max:=0;
repeat
k:=c[p];
for i:=1 to n-1 do
if vu[i].x=k then
begin
if viz[vu[i].y]=0 then
begin
inc(u);
c[u]:=vu[i].y;
viz[vu[i].y]:=1;
if vu[i].c>max then
max:=vu[i].c;
if vu[i].y=y then
begin
maxim:=max;
exit;
end;
end;
end else
if vu[i].y=k then
begin
if viz[vu[i].x]=0 then
begin
inc(u);
c[u]:=vu[i].x;
viz[vu[i].x]:=1;
if vu[i].c>max then
max:=vu[i].c;
if vu[i].x=y then
begin
maxim:=max;
exit;
end;
end;
end;
inc(p);
until p>u;
end; }
procedure df(vf,max:longint);
var i:longint;
begin
viz[vf]:=1;
if vf=y then
begin
maxim:=max;
end else
for i:=1 to n-1 do
if vu[i].x=vf then
begin
if viz[vu[i].y]=0 then
df(vu[i].y,max1(max,vu[i].c));
end else
if vu[i].y=vf then
begin
if viz[vu[i].x]=0 then
df(vu[i].x,max1(max,vu[i].c));
end;
end;
procedure prel;
var i:longint;
begin
for i:=1 to k do
begin
readln(f,x,y);
fillchar(viz,sizeof(viz),0);
maxim:=0;
df(x,0);
writeln(g,maxim);
end;
close(f);
close(g);
end;
begin
iofile;
kruskal;
prel;
end.