Назад к лучшим решениям Status: AC, problem ZELC, contest ZEL07. By tourist (Gennady Korotkevitch), 2007-03-10 11:41:45.
  1. {$R-,S-,Q-,I-,O+}
  2. var
  3. uu,kol,z,u,q,n,qq,tt,i: longint;
  4. sumx,sumy,tmp,min,xx,yy: single;
  5. key,x,y: array [0..3010] of single;
  6. pr,ne,pred: array [0..3010] of longint;
  7. begin
  8. read(tt);
  9. for qq:=1 to tt do
  10. begin
  11. read(n);
  12. for i:=1 to n do read(x[i],y[i]);
  13. for q:=1 to n do key[q]:=1000000000;
  14. for i:=0 to n+1 do
  15. begin
  16. pr[i]:=i-1;
  17. ne[i]:=i+1;
  18. end;
  19. key[1]:=0; pred[1]:=0;
  20. u:=1;
  21. for q:=1 to n-1 do
  22. begin
  23. ne[pr[u]]:=ne[u];
  24. pr[ne[u]]:=pr[u];
  25. uu:=u;
  26. min:=1000000001; u:=0;
  27. i:=ne[0];
  28. while i <= n do
  29. begin
  30. tmp:=sqr(x[i]-x[uu])+sqr(y[i]-y[uu]);
  31. if tmp < key[i] then
  32. begin
  33. key[i]:=tmp;
  34. pred[i]:=uu;
  35. end;
  36. if key[i] < min then
  37. begin
  38. min:=key[i];
  39. u:=i;
  40. end;
  41. i:=ne[i];
  42. end;
  43. end;
  44. writeln(0);
  45. writeln(n-1);
  46. for i:=2 to n do writeln(pred[i]-1,' ',i-1);
  47. end;
  48. end.