标签:
Description
Input
Output
Sample Input
2 0 0 3 4 3 17 4 19 4 18 5 0
Sample Output
Scenario #1 Frog Distance = 5.000 Scenario #2 Frog Distance = 1.414
思路:最短路or最小生成树,松弛过程中,取点时收入集合边的最大值,即Answer;
代码:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<vector>
#include<queue>
#include<stack>
#include<map>
#define INF 0x3f3f3f3f
#define mem(a,b) memset(a,b,sizeof(a))
using namespace std;
typedef long long LL;
const int N=1002;
int x[N],y[N];
double gra[N][N];
double dist[N];
int vis[N];
double ans;
void dijkstra(int n)
{
for(int i=1;i<=n;i++)
{
dist[i]=INF;
vis[i]=0;
}
dist[1]=0;
for(int i=1;i<=n;i++)
{
int pos=-1;
double minn=INF;
for(int j=1;j<=n;j++)
{
if(!vis[j]&&dist[j]<minn)
{
minn=dist[j];
pos=j;
}
}
if(ans<minn)
ans=minn;
if(pos==2) break;
vis[pos]=1;
for(int j=1;j<=n;j++)
{
if(!vis[j]&&dist[j]>gra[pos][j])
{
dist[j]=gra[pos][j];
}
}
}
}
int main()
{
int n;
int cas=0;
while(scanf("%d",&n)==1)
{
if(n==0) break;
for(int i=1;i<=n;i++)
{
scanf("%d%d",x+i,y+i);
}
for(int i=1;i<=n;i++){
for(int j=i+1;j<=n;j++){
gra[i][j]=gra[j][i]=(double)sqrt((x[i]-x[j])*(x[i]-x[j])+(y[i]-y[j])*(y[i]-y[j]));
}
}
ans=0;
dijkstra(n);
printf("Scenario #%d\nFrog Distance = %.3f\n\n",++cas,ans);
}
return 0;
}
标签:
原文地址:http://blog.csdn.net/code_or_code/article/details/43793353