Online JudgeProblem SetAuthorsOnline ContestsUser
Web Board
Home Page
F.A.Qs
Statistical Charts
Problems
Submit Problem
Online Status
Prob.ID:
Register
Update your info
Authors ranklist
Current Contest
Past Contests
Scheduled Contests
Award Contest
User ID:
Password:
  Register

坑爹呀,这个故事告诉我们千万不要装逼。。。。

Posted by tenglinxi at 2016-05-24 18:46:14 on Problem 2253
In Reply To:这倒题可以用 dijkstra的优先队列过吗? Posted by:tenglinxi at 2016-05-24 18:32:29
#include<stdio.h>
#include<string.h>
#include<vector>
#include<algorithm>
#include<queue>
#include<cmath>
#include<iostream>

using namespace std;

const int maxn=1005;
vector<pair<int,double> >E[maxn];
double x[maxn],y[maxn];
double d[maxn];
double maps[maxn][maxn];

void init()
{
    for(int i=0;i<maxn;i++)E[i].clear();
    for(int i=0;i<maxn;i++)d[i]=1e9;
        //for(int j=0;j<maxn;j++)
            //d[i][j]=1e9;
}

int main()
{
    int t,temp=1;
    while(~scanf("%d",&t))
    {
        if(t==0)
            break;
        init();
        for(int i=1;i<=t;i++)
        {
            scanf("%lf%lf",&x[i],&y[i]);
        }

        for(int i=1;i<=t;i++)
        {
            for(int j=1;j<=t;j++)
            {
                //if(i==j)continue;
                maps[i][j]=sqrt((x[i]-x[j])*(x[i]-x[j])+(y[i]-y[j])*(y[i]-y[j]));
                E[i].push_back(make_pair(j,maps[i][j]));
                E[j].push_back(make_pair(i,maps[i][j]));
            }
        }
        /*for(int i=1;i<=3;i++)
        {
            for(int j=0;j<=5;j++)
            {
                cout<<E[i][j].second<<" ";
            }
            cout<<endl;
        }*/
        //printf("%.3lf",E[1][3].second);
        priority_queue<pair<double,int> >Q;
        Q.push(make_pair(-d[1],1));
        d[1]=0;
        while(!Q.empty())
        {
            int now=Q.top().second;
            Q.pop();
            for(int i=0;i<E[now].size();i++)
            {
                int v=E[now][i].first;
                if(d[v]>d[now]&&d[v]>E[now][i].second)
                {
                    /*if(d[now]>E[now][i].second)
                    {
                        d[v]=d[now];
                    }
                    else if(d[now]<E[now][i].second)
                    {
                        d[v]=E[now][i].second;
                    }*/
                    d[v]=max(d[now],E[now][i].second);
                    Q.push(make_pair(-d[v],v));
                }
            }
        }
        printf("Scenario #%d\nFrog Distance = %.3f \n\n",temp++,d[2]);

    }
}

Followed by:

Post your reply here:
User ID:
Password:
Title:

Content:

Home Page   Go Back  To top


All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator