Advertisement
Guest User

Untitled

a guest
May 22nd, 2019
61
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.16 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4. using pii=pair<int,int>;
  5. const int N=50001;
  6. const int INF=1e9;
  7. pii a[N];
  8. int ix[N];
  9. int dist[N];
  10. //vector <bool> visit(N,false);
  11. int edge[N];
  12.  
  13. int main()
  14. {
  15. int n,k;
  16. scanf("%d%d",&n,&k);
  17. for(int i=1;i<=n;++i){
  18. scanf("%d%d",&a[i].first,&a[i].second);
  19. ix[i]=i;
  20. }
  21. fill(dist+1,dist+n+1,INF);
  22. dist[1]=0;
  23. int sum=0,cnt=0;
  24. while(true){
  25. int mindist=INF,u=-1,ui=-1;
  26. for(int ii=1;ii<=n-cnt;++ii){
  27. int i=ix[ii];
  28. if(dist[i]<mindist){
  29. mindist=dist[i];
  30. u=i;
  31. ui=ii;
  32. }
  33. }
  34. if(u==-1) break;
  35. swap(ix[ui],ix[n-cnt]);
  36. edge[cnt++]=dist[u];
  37. sum+=dist[u];
  38. for(int vv=1;vv<=n-cnt;++vv){
  39. int v=ix[vv];
  40. if(abs(a[u].first-a[v].first)+abs(a[u].second-a[v].second)<dist[v]){
  41. dist[v]=abs(a[u].first-a[v].first)+abs(a[u].second-a[v].second);
  42. }
  43. }
  44. }
  45. sort(edge,edge+n,greater<int>());
  46. for(int i=0;i<k-1;++i) sum-=edge[i];
  47. printf("%d",sum);
  48. return 0;
  49. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement