zoukankan      html  css  js  c++  java
  • [AMPPZ2014]The Captain

    题面

    这道题我们首先会想到优化建图;

    线段树优化建图?不对不对;

    那么就具体问题具体分析:

    浅显的性质:有可能选择的边一定存在于按x或y排序的相邻的两个点之间;

    那么O(n)建图,然后dijkstra就好了;

    #include <bits/stdc++.h>
    #define inc(i,a,b) for(register int i=a;i<=b;i++)
    using namespace std;
    class node{
        public:
        int x,y,id;
    }points[200010];
    bool cmp1(node x,node y){
        return x.x<y.x;
    }
    bool cmp2(node x,node y){
        return x.y<y.y;
    }
    int head[200010],cnt;
    class littlestar{
        public:
        int to,nxt,w;
        void add(int u,int v,int gg){
            to=v; nxt=head[u];
            head[u]=cnt; w=gg;
        }
    }star[800010];
    priority_queue<pair<int,int> >qwq;
    int dis[200010],vis[200010];
    void dijkstra()
    {
        qwq.push(make_pair(0,1));
        memset(dis,0x3f,sizeof(dis));
        dis[1]=0;
        while(qwq.size()){
            int u=qwq.top().second;
            qwq.pop();
            if(vis[u]) continue;
            vis[u]=1;
            for(register int i=head[u];i;i=star[i].nxt){
                int v=star[i].to;
                if(dis[v]>dis[u]+star[i].w){
                    dis[v]=dis[u]+star[i].w;
                    qwq.push(make_pair(-dis[v],v));
                }
            }
        }
    }
    int main()
    {
        int n;
        scanf("%d",&n);
        inc(i,1,n) scanf("%d%d",&points[i].x,&points[i].y),points[i].id=i;
        sort(points+1,points+1+n,cmp1);
        inc(i,2,n){
            star[++cnt].add(points[i-1].id,points[i].id,points[i].x-points[i-1].x);
            star[++cnt].add(points[i].id,points[i-1].id,points[i].x-points[i-1].x);
        }
        sort(points+1,points+1+n,cmp2);
        inc(i,2,n){
            star[++cnt].add(points[i-1].id,points[i].id,points[i].y-points[i-1].y);
            star[++cnt].add(points[i].id,points[i-1].id,points[i].y-points[i-1].y);
        }
        dijkstra();
        cout<<dis[n];
    }
    /*
    5
    2 2
    1 1
    4 5
    7 1
    6 7
    */
    
  • 相关阅读:
    计算机网络-数据结构-MAC帧头-IP头-TCP头-UDP头
    (考研)java网络编程
    多态(重点:方法的多态性和对象的多态性)
    JZOJ1497 景点中心 题解
    JZOJ1227 Coprime 题解
    JZOJ3966 Sabotage 题解
    JZOJ3056 数字 题解
    JZOJ3054 祖孙询问 题解
    【Luogu P2282】【JZOJ 4906】【NOIP2016提高组复赛】组合数问题 题解
    JZOJ4316【NOIP2015模拟11.5】Isfind 题解
  • 原文地址:https://www.cnblogs.com/kamimxr/p/12018802.html
Copyright © 2011-2022 走看看