zoukankan      html  css  js  c++  java
  • 【BZOJ4152】The Captain

    题面

    http://darkbzoj.tk/problem/4152

    题解

    #include<cstdio>
    #include<cstring>
    #include<iostream>
    #include<queue>
    #include<algorithm>
    #define ri register int
    #define N 200050
    #define LL long long
    using namespace std;
    
    vector<int> to[N],len[N];
    int n,id[N];
    struct node {int x,y;} a[N];
    bool cmpx(int k1,int k2) {return a[k1].x>a[k2].x;}
    bool cmpy(int k1,int k2) {return a[k1].y>a[k2].y;}
    
    struct nod {
      int x; LL d;
      bool operator < (const nod &rhs) const {
        return d>rhs.d;
      }
    };
    
    LL dis[N];
    bool vis[N];
    priority_queue<nod> q;
    
    void add_edge(int x,int y,int z) {
      to[x].push_back(y); len[x].push_back(z);
      to[y].push_back(x); len[y].push_back(z);
    }
    
    LL dij(){
      memset(dis,0x3f,sizeof(dis));
      dis[1]=0;
      q.push((nod){1,0});
      while (!q.empty()) {
        int x=q.top().x; q.pop();
        if (vis[x]) continue;
        vis[x]=1;
        for (ri i=0;i<to[x].size();i++) {
          int y=to[x][i];
          if (dis[y]>dis[x]+len[x][i]) {
            dis[y]=dis[x]+len[x][i];
            q.push((nod){y,dis[y]});
          }
        }
      }
      return dis[n];
    }
    
    int main(){
      scanf("%d",&n);
      for (ri i=1;i<=n;i++) scanf("%d %d",&a[i].x,&a[i].y);
      for (ri i=1;i<=n;i++) id[i]=i;
      sort(id+1,id+n+1,cmpx);
      for (ri i=1;i<n;i++) add_edge(id[i],id[i+1],a[id[i]].x-a[id[i+1]].x);
      sort(id+1,id+n+1,cmpy);
      for (ri i=1;i<n;i++) add_edge(id[i],id[i+1],a[id[i]].y-a[id[i+1]].y);
      cout<<dij()<<endl;
    }
  • 相关阅读:
    JS高级
    函数作用域面试题
    11.14
    11.13
    Redux知识
    react-router-dom
    react 的三大属性
    vuex
    数组的扩展
    函数作用域和 class
  • 原文地址:https://www.cnblogs.com/shxnb666/p/11278398.html
Copyright © 2011-2022 走看看