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. 从Oracle Database 角度来看浪潮天梭K1主机的操作系统选择

    背景: 浪潮天梭k1主机.事实上分好几个类别: K1-950 intel 安腾cpu K1-930 intel 安腾cpu K1-910 intel 安腾cpu K1-800 intel 志强cpu ...

  2. hdoj--5562--Clarke and food(模拟)

    Clarke and food Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) ...

  3. Python3基础笔记---re模块

    参考博客: Py西游攻关之模块 就其本质而言,正则表达式(或 RE)是一种小型的.高度专业化的编程语言,(在Python中)它内嵌在Python中,并通过 re 模块实现.正则表达式模式被编译成一系列 ...

  4. 洛谷P3402 【模板】可持久化并查集

    一定注意每一次都要是 $root[cur]=root[cur-1]$,不然进行合并时如果 $a,b$ 在同一集合中就会使 $root[cur]=0$. Code: #include <cstdi ...

  5. 洛谷 P1352 没有上司的舞会 (树上不相邻点权和最大)

    一颗树,选取不相邻的点,求最大点权值 因为当前结点选或不选后后效性,所以我们加一唯来取消后效性 表示以i为根的树且i不选的最大价值 表示以i为根的树且i选的最大价值 显然有 #include<c ...

  6. 中断API之enable_irq

    void enable_irq(unsigned int irq) 用于使能一个irq. void disable_irq(unsigned int irq)则用于禁止一个irq 其使用的例程如下: ...

  7. 【LeetCode-面试算法经典-Java实现】【057-Insert Interval(插入区间)】

    [057-Insert Interval(插入区间)] [LeetCode-面试算法经典-Java实现][全部题目文件夹索引] 原题 Given a set of non-overlapping in ...

  8. [Python] Normalize the data with Pandas

    import os import pandas as pd import matplotlib.pyplot as plt def test_run(): start_date='2017-01-01 ...

  9. 《R实战》读书笔记二

    第一章 R简单介绍 本章概要 1安装R 2理解R语言 3执行R程序 本章所介绍的内容概括例如以下. 一个典型的数据分析步骤如图1所看到的. 图1:典型数据分析步骤 简而言之,现今的数据分析要求我们从多 ...

  10. Azure 配置高可用的准备系列工作-建立不同区域的存储账户和建立网络!

     我们谈到我们的业务,常常谈到一个词.三层架构,就是我们的UI层.数据訪问层和数据存储层的分离,通常情况下我们的业务高可用必须满足这三层的所有高可用的情况下才干达到最高级别的高可用. 那么谈到Az ...