Pagini recente » Cod sursa (job #717588) | Cod sursa (job #3267679) | Cod sursa (job #1836889) | Cod sursa (job #764266) | Cod sursa (job #50224)
Cod sursa(job #50224)
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 max:longint;
begin
max:=0;
while (t[x]<>x) do begin
if (d[x]>max) then max:=d[x];
x:=t[x];
end;
while (t[y]<>y) do begin
if (d[y]>max) then max:=d[y];
y:=t[y];
end;
get_max:=max;
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.