Advertisement
YEZAELP

TOI12: Pipe

Jun 10th, 2020
162
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.14 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. const int INF = 1e9 ;
  4. using pii=pair<int,int>;
  5. int distance(pii a,pii b ){
  6.     return abs(a.first-b.first) + abs(a.second-b.second);
  7. }
  8. int main(){
  9.  
  10.     int n,k;
  11.     scanf("%d%d",&n,&k);
  12.     pii point[n+1];
  13.     int dis[n+1],idx[n+1];
  14.     bool visited[n+1];
  15.  
  16.     for(int i=1;i<=n;i++){
  17.         int x,y;
  18.         visited[i]=false;
  19.         dis[i]=INF;
  20.         idx[i]=i;
  21.         scanf("%d%d",&point[i].first,&point[i].second);
  22.     }
  23.  
  24.     int cnt=n,dist=0,u=1,d=0,I=1;
  25.     dis[1]=0;
  26.     while(cnt>0){
  27.  
  28.         dist+=d;
  29.         swap(idx[I],idx[cnt]);
  30.         cnt--;
  31.         int U=u;
  32.         d=INF;
  33.  
  34.         for(int v=1;v<=cnt;v++){
  35.             int w=distance(point[U],point[idx[v]]);
  36.             if(w<dis[idx[v]]){
  37.                 dis[idx[v]]=w;
  38.             }
  39.             if(dis[ idx[v] ]<d){
  40.                 d=dis[ idx[v] ];
  41.                 u=idx[v];
  42.                 I=v;
  43.             }
  44.         }
  45.     }
  46.  
  47.     sort(dis+1,dis+n+1,greater<int>());
  48.     for(int i=1;i<=k-1;i++){
  49.         dist-=dis[i];
  50.     }
  51.     printf("%d",dist);
  52.  
  53.     return 0;
  54. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement