zoukankan      html  css  js  c++  java
  • P1744 采购特价商品

    题目描述

    中山路店山店海,成了购物狂爱与愁大神的“不归之路”。中山路上有n(n<=100)家店,每家店的坐标均在-10000~10000之间。其中的m家店之间有通路。若有通路,则表示可以从一家店走到另一家店,通路的距离为两点间的直线距离。现在爱与愁大神要找出从一家店到另一家店之间的最短距离。你能帮爱与愁大神算出吗?

    输入输出格式

    输入格式:

    共n+m+3行:

    第1行:整数n

    第2行~第n+1行:每行两个整数x和y,描述了一家店的坐标

    第n+2行:整数m

    第n+3行~第n+m+2行:每行描述一条通路,由两个整数i和j组成,表示第i家店和第j家店之间有通路。

    第n+m+3行:两个整数s和t,分别表示原点和目标店

    输出格式:

    仅一行:一个实数(保留两位小数),表示从s到t的最短路径长度。

    输入输出样例

    输入样例#1: 复制
    5
    0 0
    2 0
    2 2
    0 2
    3 1
    5
    1 2
    1 3
    1 4
    2 5
    3 5
    1 5
    输出样例#1: 复制
    3.41

    说明

    100%数据:n<=100,m<=1000

    #include <bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    #define inf 2147483647
    const ll INF = 0x3f3f3f3f3f3f3f3fll;
    #define ri register int
    template <class T> inline T min(T a, T b, T c)
    {
        return min(min(a, b), c);
    }
    template <class T> inline T max(T a, T b, T c)
    {
        return max(max(a, b), c);
    }
    template <class T> inline T min(T a, T b, T c, T d)
    {
        return min(min(a, b), min(c, d));
    }
    template <class T> inline T max(T a, T b, T c, T d)
    {
        return max(max(a, b), max(c, d));
    }
    #define pi acos(-1)
    #define me(x, y) memset(x, y, sizeof(x));
    #define For(i, a, b) for (int i = a; i <= b; i++)
    #define FFor(i, a, b) for (int i = a; i >= b; i--)
    #define mp make_pair
    #define pb push_back
    const int maxn = 100005;
    #define mod 100003
    const int N=10000;
    
    // name*******************************
    int n,m;
    struct node
    {
        int x,y;
    } p[1005];
    struct edge
    {
        int to,next;
        double w;
    } e[N];
    int Head[N];
    int tot=0;
    int ss,tt;
    int vis[N];
    double dis[N];
    queue<int>que;
    // function******************************
    double dist(node a,node b)
    {
        return sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y));
    }
    void add(int u,int v,double w)
    {
        e[++tot].to=v;
        e[tot].next=Head[u];
        Head[u]=tot;
        e[tot].w=w;
    }
    
    void spfa(int u)
    {
        que.push(u);
        vis[u]=1;
        dis[u]=0;
        while(!que.empty())
        {
            int u=que.front();
            que.pop();
            vis[u]=0;
            for(int p=Head[u]; p; p=e[p].next)
            {
                int v=e[p].to;
                double w=e[p].w;
                if(dis[v]>dis[u]+w)
                {
                    dis[v]=dis[u]+w;
                    if(!vis[v])
                    {
                        vis[v]=1;
                        que.push(v);
                    }
                }
            }
        }
    }
    
    //***************************************
    int main()
    {
    //         freopen("test.txt", "r", stdin);
        cin>>n;
        For(i,1,n)
        scanf("%d%d",&p[i].x,&p[i].y);
        cin>>m;
        For(i,1,m)
        {
            int a,b;
            scanf("%d%d",&a,&b);
            double c=dist(p[a],p[b]);
            add(a,b,c);
            add(b,a,c);
        }
        cin>>ss>>tt;
        For(i,1,n)
        dis[i]=inf;
        spfa(ss);
        printf("%.2f",dis[tt]);
    
        return 0;
    }
  • 相关阅读:
    vim 常用操作
    Zookeeper 一种简单的原子操作机制:
    用习惯的vimrc配置,在这里记录一下,以后可以继续完善使用
    static_cast, dynamic_cast, const_cast探讨【转】
    常用CSS标签使用
    Java基础
    Hibernate的第一个程序
    Hibernate的优缺点
    python基础语法
    ansible-role安装nginx,keepalived,tomcat
  • 原文地址:https://www.cnblogs.com/planche/p/8688985.html
Copyright © 2011-2022 走看看