Advertisement
Morass

Arctic Network

Mar 22nd, 2016
103
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.90 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. #define F(W) for(int i(0);i<W;++i)
  4. #define FF(W) for(int j(0);j<W;++j)
  5. #define FT(I,W) for(int k(I);k<W;++k)
  6. #define ZERO (1e-10)
  7. #define EPS ZERO
  8. #define INF (1<<30)
  9. #define LINF (1LL<<60)
  10. #define NINF (-(1<<30))
  11. #define MP(A,B) make_pair(A,B)
  12. #define CL(A,I) (memset(A,I,sizeof(A)))
  13. #define ADD(A,B,V) (g[A].push_back(B),g[B].push_back(A),v[A].push_back(V),v[B].push_back(V))
  14. #define add(A,B) (g[A].push_back(B),g[B].push_back(A))
  15. #define DEB printf("DEB!\n");
  16. #define DEX printf("DD2!\n");
  17. #define EQ(A,B) (A+ZERO>B&&A-ZERO<B)
  18. typedef long long ll;
  19. typedef pair<ll, ll> pll;
  20. typedef vector<int> vi;
  21. typedef pair<int, int> ii;
  22. #define REP(i, n) for (int i = 0; i < n; i++)
  23. #define IN(n) int n; cin >> n;
  24. #define PB push_back
  25. #define MX (512)
  26. double dst(double AX,double AY,double BX,double BY){
  27.     return sqrt(pow(AX-BX,2)+pow(AY-BY,2));
  28. }
  29. double x[MX],y[MX];
  30. int tt,K,N;
  31. struct eg{
  32.     eg(int f,int t,double v):f(f),t(t),v(v){}
  33.     int f,t;
  34.     double v;
  35.     bool operator<(const eg&r)const{return v>r.v;}
  36. };
  37. priority_queue<eg> q;
  38. int W[MX],C[MX];
  39. void rc(int c,int t){
  40.     W[t]+=W[c];
  41.     W[c]=-1;
  42.     C[c]=t;
  43. }
  44. int geco(int a){
  45.     return a==C[a]?a:geco(C[a]);
  46. }
  47. bool con(int a,int b){
  48.     C[a]=geco(a);C[b]=geco(b);
  49.     if(C[a]==C[b])return 0;
  50.     rc(C[b],C[a]);
  51.     return 1;
  52. }
  53. double st(int H){
  54.     double S(0);
  55.     while(H--){
  56.         con(q.top().f,q.top().t);
  57.         S=q.top().v;
  58.         while(!q.empty()&&geco(q.top().f)==geco(q.top().t))q.pop();
  59.     }
  60.     while(!q.empty())q.pop();
  61.     return S;
  62. }
  63. int main(void){
  64.     for(scanf("%d",&tt);tt--;){
  65.         scanf("%d%d",&K,&N);
  66.         F(N)scanf("%lf%lf",x+i,y+i);
  67.         F(N)FT(i+1,N)q.push(eg(i,k,dst(x[i],y[i],x[k],y[k])));
  68.         iota(C,C+N,0);CL(W,0);
  69.         if(K<=1)printf("%.2lf\n",st(N-1));
  70.         else printf("%.2lf\n",st(N-K));
  71.     }
  72.     return 0;
  73. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement