Advertisement
YEZAELP

PROG-1115: อุลตร้าแมน (Ultraman)

Jun 10th, 2020
165
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.38 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. using pi = pair<int,int>;
  4. using pii = pair<int,pi>;
  5. using pfi = pair<double,pi>;
  6. int parent[15001];
  7. pi ar[15001];
  8. double distance(pi a,pi b ){
  9.     int d1,d2;
  10.     d1=a.first-b.first;
  11.     d2=a.second-b.second;
  12.     return sqrt(d1*d1+d2*d2);
  13. }
  14. int root(int u){
  15.     if( parent[u] == u ) return u;
  16.     return parent[u] = root(parent[u]) ;
  17. }
  18. int main(){
  19.  
  20.     int n,k;
  21.     scanf("%d%d",&n,&k);
  22.  
  23.     for(int i=1;i<=n;i++){
  24.         int x,y;
  25.         scanf("%d%d",&ar[i].first,&ar[i].second);
  26.         parent[i]=i;
  27.     }
  28.  
  29.     vector <pfi> pq;
  30.  
  31.     for(int i=1;i<=n;i++){
  32.         for(int j=i+1;j<=n;j++){
  33.             pq.push_back({distance(ar[i],ar[j]),{i,j}});
  34.         }
  35.     }
  36.  
  37.     sort( pq.begin() , pq.end() );
  38.  
  39.     int node=n-k;
  40.     double dis=0.0;
  41.     for(int i=0;i<pq.size();i++){
  42.  
  43.         int u,v;
  44.         double d;
  45.         d=pq[i].first;
  46.         u=pq[i].second.first;
  47.         v=pq[i].second.second;
  48.  
  49.         u=root(u);
  50.         v=root(v);
  51.         if(u==v) continue;
  52.         parent[u]=v;
  53.         dis=d;
  54.         node--;
  55.         if(node==0) break;
  56.  
  57.     }
  58.  
  59.     printf("%.0f",dis*dis);
  60.  
  61.     return 0;
  62. }
  63. // หาเส้นที่ยาวที่สุดจากการเชื่มต่อที่สั้นที่สุดโดยต้องมีจำนวนกลุ่มตามโจทย์
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement