Pagini recente » Cod sursa (job #1908911) | Cod sursa (job #2032481) | Cod sursa (job #100505) | Cod sursa (job #1195832) | Cod sursa (job #50225)
Cod sursa(job #50225)
program radiatie;
const Nmax=15000;
Mmax=30000;
var a,b:array[1..Mmax]of integer;
c:array[1..Mmax]of longint;
t,h:array[1..Nmax]of integer;
d:array[1..Nmax]of longint;
n,m,k,i,x,y:integer;
fin,fout:text;
procedure citire;
begin
assign(fin,'radiatie.in');reset(fin);
readln(fin,n,m,k);
for i:=1 to m do
readln(fin,a[i],b[i],c[i]);
end;
procedure qsort(l,r:integer);
var i,j,m,aux:longint;
begin
i:=l;
j:=r;
m:=c[(i+j)div 2];
repeat
while (c[i]<m) do inc(i);
while (c[j]>m) do dec(j);
if (i<=j) then begin
aux:=a[i];a[i]:=a[j];a[j]:=aux;
aux:=b[i];b[i]:=b[j];b[j]:=aux;
aux:=c[i];c[i]:=c[j];c[j]:=aux;
inc(i);
dec(j);
end;
until (i>j);
if (i<r) then qsort(i,r);
if (l<j) then qsort(l,j);
end;
function multime(nod:integer):integer;
begin
while (t[nod]<>nod) do
nod:=t[nod];
multime:=nod;
end;
procedure merge_multimi(i,head1,head2:integer);
begin
if (h[head1]>h[head2]) then
begin
t[head2]:=head1;
d[head2]:=c[i];
end
else if (h[head1]<h[head2]) then
begin
t[head1]:=head2;
d[head1]:=c[i];
end
else begin
inc(h[head1]);
t[head2]:=head1;
d[head2]:=c[i];
end;
end;
procedure kruskal;
var head1,head2:integer;
begin
for i:=1 to n do begin
t[i]:=i;
h[i]:=1;
end;
for i:=1 to m do begin
head1:=multime(a[i]);
head2:=multime(b[i]);
if (head1<>head2) then merge_multimi(i,head1,head2);
end;
end;
function get_max(x,y:integer):longint;
var maxx,xx,maxy:longint;
begin
maxx:=0;
maxy:=0;
xx:=x;
while ((t[x]<>x)and(x<>y)) do begin
if (d[x]>maxx) then maxx:=d[x];
x:=t[x];
end;
if (x=y) then begin get_max:=maxx;exit;end;
while ((t[y]<>y)and(y<>xx)) do begin
if (d[y]>maxy) then maxy:=d[y];
y:=t[y];
end;
if (y=xx) then begin get_max:=maxy;exit;end;
if (maxx>maxy) then get_max:=maxx else get_max:=maxy;
end;
begin
citire;
qsort(1,m);
kruskal;
assign(fout,'radiatie.out');rewrite(fout);
for i:=1 to k do begin
readln(fin,x,y);
writeln(fout,get_max(x,y));
end;
close(fout);
close(fin);
end.