#P2026. As the Crow Flies
As the Crow Flies
描述
作为一家初创航空公司的总裁,您启动了常旅客计划,根据客户旅行的英里数进行奖励。作为盈利性企业,您有动机最小化单次行程可获得的常旅客里程数。为了估算客户在现有航线网络中可能获得的里程数,您决定编写一个程序。
假设条件:
- 乘客行程为单程(无返程航班)
- 所有行程都选择出发城市到目的城市的最短路线
- 常旅客里程按"直线飞行距离"计算(即连接路径上各城市的地球表面最短路径)
- 地球表面视为完美球体,半径为 &4000& 英里
输入格式: 第&1& 行包含整数 &n& 表示数据集数量。每个数据集包含以下&3&部分:
-
标题行 - 单行格式 "&X Y&":
- &X& 表示城市数量(&1& < &X& < &100&)
- &Y& 表示直飞航线数量(&1& < &Y& < &100&)
-
城市列表 - 每行格式为: "&C LA NS LO EW&"
- &C&:城市名称(无空格,首字母大写,其余小写)
- &LA&:纬度度数(&0& ≤ &LA& ≤ &90&)
- &NS&:纬度方向('N'表示北纬/'S'表示南纬)
- &LO&:经度度数(&0& ≤ &LO& ≤ &180&)
- &EW&:经度方向('E'表示东经/'W'表示西经)
-
航班列表 - 每行格式为 "&B C&":
- 表示城市 &B& 和 &C& 之间有直飞航班(双向等效)
特殊说明:
- 某些经度值存在多种表示方式(如 &180E& = &180W&)
- 所有经纬度均为整数
- 保证航线网络连通(任意两城市间至少存在一条路径)
输出格式:
对每个数据集,输出相距最远的两个城市(即所有城市对中最短路径最长的组合)。保证结果唯一,按字典序排列城市名称,格式为:
&城市A 城市B&
示例输入:
2
6 5
Northpole 90 N 87 E
Southpole 90 S 180 W
Equatorone 0 N 45 W
Equatortwo 0 S 90 E
Equatorthree 0 S 180 E
Equatorfour 0 N 46 W
Equatorone Equatortwo
Equatortwo Equatorthree
Equatorthree Equatorfour
Northpole Equatortwo
Southpole Equatorthree
2 1
Northpole 90 N 0 E
Southpole 90 S 0 W
Southpole Northpole
示例输出:
Equatorfour Equatorthree
Northpole Southpole