先按时间排序,每次连边再用并查集判断,下附程序(打得有点匆忙,有错的话请见谅)
var
i,j,k,n,m,bj:longint;
fa:array[1..1010]of longint;
x,y,t:array[1..101000]of longint;
Procedure qsort(l,r:longint);
var
i,j,mid:longint;
begin
i:=l; j:=r; mid:=t[(l+r)div 2];
repeat
while t[i]<mid do inc(i);
while t[j]>mid do dec(j);
if i<=j then
begin
k:=t[i];t[i]:=t[j]; t[j]:=k;
k:=x[i];x[i]:=x[j]; x[j]:=k;
k:=y[i];y[i]:=y[j]; y[j]:=k;
inc(i);dec(j);
end;
until i>j;
if i<r then qsort(i,r);
if l<j then qsort(l,j);
end;
Function findfa(x:longint):longint;
begin
if fa[x]=x then exit(x)
else
begin
findfa:=findfa(fa[x]);
fa[x]:=findfa;
end;
end;
begin
read(n,m);
for i:=1 to m do
read(x[i],y[i],t[i]);
for i:=1 to n do fa[i]:=i;
qsort(1,m);
for i:=1 to m do
begin
fa[findfa(x[i])]:=findfa(y[i]);
k:=findfa(1); bj:=1;
for j:=1 to n do if findfa(j)<>k then begin bj:=0; break;end;
if bj=1 then
begin
writeln(t[i]);
halt;
end;
end;
writeln('-1');
end.
温馨提示:内容为网友见解,仅供参考