Frogger


Time Limit: 2 Seconds      Memory Limit: 65536 KB


Freddy Frog is sitting on a stone in the middle of a lake. Suddenly he notices Fiona Frog who is sitting on another stone. He plans to visit her, but since the water is dirty and full
of tourists' sunscreen, he wants to avoid swimming and instead reach her by jumping. 



Unfortunately Fiona's stone is out of his jump range. Therefore Freddy considers to use other stones as intermediate stops and reach her by a sequence of several small jumps. 



To execute a given sequence of jumps, a frog's jump range obviously must be at least as long as the longest jump occuring in the sequence. 

The frog distance (humans also call it minimax distance) between two stones therefore is defined as the minimum necessary jump range over all possible paths between the two stones.

You are given the coordinates of Freddy's stone, Fiona's stone and all other stones in the lake. Your job is to compute the frog distance between Freddy's and Fiona's stone.

Input



The input will contain one or more test cases. The first line of each test case will contain the number of stones n (2 <= n <= 200). The next n lines each contain two integers xi, yi (0 <= xi, yi <= 1000) representing the coordinates of stone #i. Stone #1 is
Freddy's stone, stone #2 is Fiona's stone, the other n-2 stones are unoccupied. There's a blank line following each test case. Input is terminated by a value of zero (0) for n.

Output



For each test case, print a line saying "Scenario #x" and a line saying "Frog Distance = y" where x is replaced by the test case number (they are numbered from 1) and y is replaced by the appropriate real number, printed to three decimals. Put a blank line
after each test case, even after the last one.

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

就是说公青蛙和母青蛙都在一棵树上时,求当前树上的最大边;最小生成树,最后用并查集思想过。

附ac代码:

   #include<stdio.h>
#include<string.h>
#include<algorithm>
#include<math.h>
using namespace std;
int per[220000];
struct node
{
int start;
int end;
double dis;
}t[200100];
int cmp(node a,node b)
{
return a.dis < b.dis ;
}
int find(int x)
{
int r=x;
while(r!=per[r])
r=per[r];
return r;
}
int join(int x,int y)
{
int fx=find(x);
int fy=find(y);
if(fx!=fy)
{
per[fx]=fy;
return 1;
}
return 0;
}
int main()
{
int i,n,j;
int flag=1;
double x[110000],y[110000];
while(scanf("%d",&n),n)
{
for(i=0;i<220000;i++)
per[i]=i;
for(i=1;i<=n;i++)
scanf("%lf%lf",&x[i],&y[i]);
int k=0;
for(i=1;i<=n;i++)
for(j=i+1;j<=n;j++)
{
t[k].start = i;
t[k].end = j;
t[k].dis =sqrt(((x[i]-x[j])*(x[i]-x[j])+(y[i]-y[j])*(y[i]-y[j]))*1.0);
k++;
}
sort(t,t+k,cmp);
double ans=0.0;
int a=0;
int b=0;
for(i=0;i<k;i++)
{
if(join(t[i].start,t[i].end))
{
/*if(ans<t[i].dis)
ans=t[i].dis;
if(x[t[i].start]==x[1]&&y[t[i].end]==y[1])
a=1;
if(x[t[i].start]==x[1]&&y[t[i].end]==y[1])
b=1;
if(a==1&&b==1)*/
if(find(1)==find(2))//公青蛙和母青蛙,在同一颗树上,
{
ans=t[i].dis;//按顺序加的边,当前边一定是所成树的最大边
break;
}
}
}
printf("Scenario #%d\n",flag);
printf("Frog Distance = %.3f\n\n",ans);
flag++;
}
return 0;
}

zoj1942Frogger的更多相关文章

随机推荐

  1. 实习第四天(bboss框架学习)

    现在好像比较使用的管理工具是gradle管理工具,学长说这个管理工具比maven管理工具要好用! 我今天主要就是想要安装好的gradle这个管理工具,但是可能是我的eclispe版本的问题,我没能安装 ...

  2. bzoj4873: [Shoi2017]寿司餐厅(最大权闭合子图)

    4873: [Shoi2017]寿司餐厅 大难题啊啊!!! 题目:传送门 题解:一眼题是网络流,但还是不会OTZ,菜啊... %题解... 最大权闭合子图!!! 好的...开始花式建边: 1.对于每个 ...

  3. 安卓开发--AsyncTask

    package com.cnn.asynctask; import android.app.Activity; import android.content.Intent; import androi ...

  4. 修改host方法

    打开路径 C:\Windows\System32\drivers\etc 将hosts文件拷贝出来修改之后放回去覆盖即可 以下是一个例子,想得到ip可以先ping一下那个域名. 左边是ip,右边是域名 ...

  5. 51Nod 活动安排问题(排序+优先队列)

    有若干个活动,第i个开始时间和结束时间是[Si,fi),同一个教室安排的活动之间不能交叠,求要安排所有活动,最少需要几个教室? Input 第一行一个正整数n (n <= 10000)代表活动的 ...

  6. RMAN备份脚本

      单机环境全备   export ORACLE_BASE=/oracle export ORACLE_HOME=$ORACLE_BASE/product/10.2.0/db_1 export ORA ...

  7. DELL T430进RAID的方式:, 硬盘损坏后的处理方式

    **DELL T430 新机安装2块硬盘后进RAID的方式: ** 一. BIOS更改 1.改启动方式为RAID mode  : 开机按F2进入BIOS 界面 --->System BIOS - ...

  8. WPS for Linux使用测评

    从去年有WPS for Linux的消息到现在,Linux 版的WPS Office在经过一系列的alpha版本之后终于迎来了Beta版本.笔者也是第一时间下载安装,WPS 文字.WPS 演示和WPS ...

  9. 【Fiddler】使用fiddler抓取指定浏览器的包

    参考资料:http://blog.csdn.net/sufubo/article/details/49331705 使用fiddler抓取不到浏览器的包时常用的解决办法: 1.必须先打开Fiddler ...

  10. socket 编程的端口和地址复用

    在linux socket网络编程中,大规模并发TCP或UDP连接时,经常会用到端口复用:   int opt = 1;   if(setsockopt(sockfd, SOL_SOCKET,SO_R ...