zoukankan      html  css  js  c++  java
  • POJ-2253 Frogger(最短路)

    https://vjudge.net/problem/POJ-2253

    题意

    公青蛙想到母青蛙那里去,期间有许多石头,公青蛙可以通过这些石头跳过去。问至少要跳的最大距离,即所有路径上石头间的最大距离的最小值。

    分析

    这题是最短路的变形,最短路求的是路径总长的最小值,而此题是求通路中最长边的最小值。其实就是对最短路的定义不同: 一般的最短路为“每个边的权值之和”,这个题的最短路为 “各个边的权值的最大值”。注意格式输出,G++用%f。

    #include<iostream>
    #include<cmath>
    #include<cstring>
    #include<queue>
    #include<vector>
    #include<cstdio>
    #include<algorithm>
    #include<map>
    #include<set>
    #define rep(i,e) for(int i=0;i<(e);i++)
    #define rep1(i,e) for(int i=1;i<=(e);i++)
    #define repx(i,x,e) for(int i=(x);i<=(e);i++)
    #define X first
    #define Y second
    #define PB push_back
    #define MP make_pair
    #define mset(var,val) memset(var,val,sizeof(var))
    #define scd(a) scanf("%d",&a)
    #define scdd(a,b) scanf("%d%d",&a,&b)
    #define scddd(a,b,c) scanf("%d%d%d",&a,&b,&c)
    #define pd(a) printf("%d
    ",a)
    #define scl(a) scanf("%lld",&a)
    #define scll(a,b) scanf("%lld%lld",&a,&b)
    #define sclll(a,b,c) scanf("%lld%lld%lld",&a,&b,&c)
    #define IOS ios::sync_with_stdio(false);cin.tie(0)
    
    using namespace std;
    typedef long long ll;
    template <class T>
    void test(T a){cout<<a<<endl;}
    template <class T,class T2>
    void test(T a,T2 b){cout<<a<<" "<<b<<endl;}
    template <class T,class T2,class T3>
    void test(T a,T2 b,T3 c){cout<<a<<" "<<b<<" "<<c<<endl;}
    template <class T>
    inline bool scan_d(T &ret){
        char c;int sgn;
        if(c=getchar(),c==EOF) return 0;
        while(c!='-'&&(c<'0'||c>'9')) c=getchar();
        sgn=(c=='-')?-1:1;
        ret=(c=='-')?0:(c-'0');
        while(c=getchar(),c>='0'&&c<='9') ret = ret*10+(c-'0');
        ret*=sgn;
        return 1;
    }
    const int N = 1e6+10;
    const int inf = 0x3f3f3f3f;
    const ll INF = 0x3f3f3f3f3f3f3f3fll;
    const ll mod = 1000000000;
    int T;
    
    void testcase(){
        printf("Case %d:",++T);
    }
    
    const int MAXN = 5e5+10 ;
    const int MAXM = 250;
    const double eps = 1e-8;
    const double PI = acos(-1.0);
    
    struct point{
        int x,y;
    }node[MAXM];
    
    double w[MAXM][MAXM],dis[MAXM];
    int n;
    int vis[MAXM];
    
    double dist(point a,point b){
        return sqrt(1.0*(a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y));
    }
    
    void init(){
        for(int i=1;i<=n;i++) scanf("%d%d",&node[i].x,&node[i].y);
        for(int i=1;i<=n;i++)
            for(int j=1;j<=n;j++)
                w[i][j]=dist(node[i],node[j]);
    }
    void dijkstra(){
        mset(vis,0);
        for(int i=1;i<=n;i++) dis[i]=inf;
        dis[1]=0;
        for(int i=1;i<=n;i++){
            int pos,m=inf;
            for(int j=1;j<=n;j++){
                if(!vis[j]&&dis[j]<m){
                    pos=j;
                    m=dis[j];
                }
            }
            vis[pos]=1;
            for(int j=1;j<=n;j++){
                dis[j]=min(dis[j],max(dis[pos],w[pos][j]));
            }
        }
    }
    int main() {
    
        int t=0;
        while(~scanf("%d",&n)&&n){
            init();
            dijkstra();
            if(t) puts("");
            printf("Scenario #%d
    Frog Distance = %.3f
    ", ++t, dis[2]);
        }
        return 0;
    }
  • 相关阅读:
    iSCSI又称为IPSAN
    文档类型定义DTD
    HDU 2971 Tower
    HDU 1588 Gauss Fibonacci
    URAL 1005 Stone Pile
    URAL 1003 Parity
    URAL 1002 Phone Numbers
    URAL 1007 Code Words
    HDU 3306 Another kind of Fibonacci
    FZU 1683 纪念SlingShot
  • 原文地址:https://www.cnblogs.com/fht-litost/p/9206558.html
Copyright © 2011-2022 走看看