GYM 101653 W.Wormhole(Floyd)
Description
給出n個星球的名稱和三維座標,距離定義為歐氏距離,其中有m對星球之間存在蟲洞,那麼這對星球之間距離為0,q次查詢,每次查詢一對星球之間的最短距離
Input
第一行一整數T表示用例組數,每組用例首先輸入一整數n表示星球數量,之後輸入每個星球的名字和三維座標x,y,x,然後是一整數m表示蟲洞數量,之後m行每行輸入兩個星球的名字表示這對星球之間存在蟲洞,然後是一整數q表示查詢數,之後q行每行兩個星球的名字表示查詢這兩個星球的最短距離(1<=T<=10,1<=n<=60,0<=x,y,z<=2e6,0<=m<=40,1<=q<=20,名字不超過50個字元)
Output
對於每次查詢,輸出這兩個星球之間最短距離
Sample Input
3
4
Earth 0 0 0
Proxima 5 0 0
Barnards 5 5 0
Sirius 0 5 0
2
Earth Barnards
Barnards Sirius
6
Earth Proxima
Earth Barnards
Earth Sirius
Proxima Earth
Barnards Earth
Sirius Earth
3
z1 0 0 0
z2 10 10 10
z3 10 0 0
1
z1 z2
3
z2 z1
z1 z2
z1 z3
2
Mars 12345 98765 87654
Jupiter 45678 65432 11111
0
1
Mars Jupiter
Sample Output
Case 1:
The distance from Earth to Proxima is 5 parsecs.
The distance from Earth to Barnards is 0 parsecs.
The distance from Earth to Sirius is 0 parsecs.
The distance from Proxima to Earth is 5 parsecs.
The distance from Barnards to Earth is 5 parsecs.
The distance from Sirius to Earth is 5 parsecs.
Case 2:
The distance from z2 to z1 is 17 parsecs.
The distance from z1 to z2 is 0 parsecs.
The distance from z1 to z3 is 10 parsecs.
Case 3:
The distance from Mars to Jupiter is 89894 parsecs.
Solution
才60個點,建好圖Floyd跑一遍即可
Code
#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<vector>
#include<queue>
#include<map>
#include<set>
#include<ctime>
using namespace std;
typedef long long ll;
#define INF 0x3f3f3f3f
#define maxn 66
map<string,int>M;
int T,n,m,q,x[maxn],y[maxn],z[maxn];
double dis[maxn][maxn];
string s[maxn];
double get(int i,int j)
{
return sqrt(pow(x[i]-x[j],2)+pow(y[i]-y[j],2)+pow(z[i]-z[j],2));
}
int main()
{
scanf("%d",&T);
for(int Case=1;Case<=T;Case++)
{
M.clear();
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
cin>>s[i]>>x[i]>>y[i]>>z[i];
M[s[i]]=i;
}
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
dis[i][j]=get(i,j);
scanf("%d",&m);
while(m--)
{
string a,b;
cin>>a>>b;
dis[M[a]][M[b]]=0;
}
for(int k=1;k<=n;k++)
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
dis[i][j]=min(dis[i][j],dis[i][k]+dis[k][j]);
scanf("%d",&q);
printf("Case %d:\n",Case);
while(q--)
{
string a,b;
char c[maxn],d[maxn];
scanf("%s%s",c,d);
a=c,b=d;
printf("The distance from %s to %s is %.0f parsecs.\n",c,d,dis[M[a]][M[b]]);
}
}
return 0;
}
相關推薦
GYM 101653 W.Wormhole(Floyd)
Description 給出n個星球的名稱和三維座標,距離定義為歐氏距離,其中有m對星球之間存在蟲洞,那麼這對星球之間距離為0,q次查詢,每次查詢一對星球之間的最短距離 Input 第一行一整數T表示用例組數,每組用例首先輸入一整數n表示星球數量,之後輸入
GYM 101653 V.Towers(dfs)
Description 一個n*n的數獨,每一行每一列數字都不同,一個數組表示該位置放這麼高的塔,已經填好一些數字並且給出一些限制,如某一行左邊的限制為從左邊看這一行能看到多少塔,上下左右都可能有類似的限制,問是否存在一個合法的數獨滿足這些條件,如果有則輸出一
信使(Floyd)
iostream 程序 信息 需要 for () sample 傳遞 範圍 題目描述 Description ?戰爭時期,前線有n個哨所,每個哨所可能會與其他若幹個哨所之間有通信聯系。信使負責在哨所之間傳遞信息,當然,這是要花費一定時間的(以天為單位)。指揮部設在第一個哨
AOJ 0189 Convenient Location (Floyd)
cstring for sci end turn ans max red none 題意: 求某一個辦公室 到其他所有辦公室的 總距離最短 辦公室數 不超過10 輸入:多組輸入,每組第一行為n (1 ≤ n ≤ 45),接下來n行是 (x, y, d),x到y的距離是d輸
【CodeForces - 296D】Greg and Graph(floyd)
body efi clu long 循環 一次 暴力 矩陣 最短距離 Description 題意:給定一個有向圖,一共有N個點,給鄰接矩陣。依次去掉N個節點,每一次去掉一個節點的同時,將其直接與當前節點相連的邊和當前節點連出的邊都需要去除,輸出N個數,表示去掉當前節點之前
POJ 1217 Arbitrage(floyd)
pri src pac pan from space code namespace 當前 題目大意 貨幣間有一定的匯率可以相互兌換, 給出n種貨幣並告訴m條各貨幣間的匯率, 看這些貨幣中能否有一種可以通過一系列的兌換而增加。 如果是可行的,那麽就輸出Yes,否則輸出N
弗洛伊德(Floyd)演算法求圖的最短路徑
https://blog.csdn.net/jeffleo/article/details/53349825 弗洛伊德基本思想 弗洛伊德演算法作為求最短路徑的經典演算法,其演算法實現相比迪傑斯特拉等演算法是非常優雅的,可讀性和理解都非常好。 基本思想: 弗洛伊德演算法定義了兩個二維
【OpenAI-Gym】學習記錄(一)gym安裝
前言 最近在學習強化學習( Reinforcement Learning ),自學過程包括理論學習部分與演算法學習部分。理論學習部分安利一本書籍 Richard S. Sutton 的 Reinforcement Learning : An Introduction;演算法學習主要為使用
OpenAI Gym 入門與提高(一) Gym環境構建與最簡單的RL agent
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!  
藍書(演算法競賽進階指南)刷題記錄——POJ1094 Sorting It All Out(floyd)
題目:POJ1094. 題目大意:給定n組不等關係,格式為x<y.現在要求輸出最早能夠確定唯一順序或產生矛盾的位置,或輸出沒有這樣一個位置,若有唯一順序要輸出順序. 注意這道題的輸出格式. 這道題一看想到了差分約束,仔細一想用floyd跑差分約束,然後發現好像確實可做. 我
Gym - 101480D -Digit Division (思路)
連結: https://vjudge.net/contest/269397#problem/D 題意: 給出n位數,和一個數m,問有多少種切割方法,使得n切割出來的數都能被m整除 思路: 如果兩部分都能被m整除,那麼和起來一定也能 #include <bits/st
Codeforces Round #179 (Div. 2): D. Greg and Graph(Floyd)
題意: 給你n個點有向圖的鄰接矩陣,之後再給你n個數,它一定是1到n的全排列,對於第i個點,求出在刪掉這個點以及與這個點相鄰的所有邊之前,當前剩下所有點兩兩最短路之和,注意刪除操作是持久的,也就是最後整個圖一定為空 思路: 水題,倒過來按照刪
最短路(Floyd)-hdu1317
題目連結:https://vjudge.net/problem/HDU-1317 題目描述: 題意:玩家起始有100個能量點,剛開始在起始房間中,每個房間外有一條單向的路徑通往其他房間(一個房間可能通往多個房間),具體通往哪些房間可以檢視房間門口的房間列表。每次玩家進入一個房間,他的能量值會更新成
#Wormhole# (開源)流式處理平臺設計思想
導讀:網際網路的迅猛發展使得資料不再昂貴,而如何從資料中更快速獲取價值變得日益重要,因此,資料實時化成為了一個大趨勢。越來越多的業務場景需要實時分析,以極低的延遲來分析實時資料並給出分析結果,從而提高業務效率,帶來更高價值。流式處理作為實時處理的一種重要手段,正在因資料實時化的發展而蓬勃發展。本文是
六度分離(floyd)
六度分離 1967年,美國著名的社會學家斯坦利·米爾格蘭姆提出了一個名為“小世界現象(small world phenomenon)”的著名假說,大意是說,任何2個素不相識的人中間最多隻隔著6個人,即只用6個人就可以將他們聯絡在一起,因此他的理論也被稱為“六度分離”理論(six degr
hdu2544 最短路(floyd) 解題報告
Problem Description 在每年的校賽裡,所有進入決賽的同學都會獲得一件很漂亮的t-shirt。但是每當我們的工作人員把上百件的衣服從商店運回到賽場的時候,卻是非常累的!所以現在他們想要尋找最短的從商店到賽場的路線,你可以幫助他們嗎? Input
hdu2544 最短路 (floyd)
最短路 Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 47151 Accepted Submis
總結一下最短路徑的弗洛伊德演算法(Floyd)
看了好多大牛部落格,我把弗洛伊德演算法在這裡總結一下。 弗洛伊德演算法的介紹,先參考百度百科:Floyd演算法 再來幾篇可以參考的博文:http://www.wutianqi.com/?p=1903 http://www.cnblogs.com/biyeymyhjob/ar
A*尋路 -- 弗洛伊德(Floyd)演算法
轉:http://www.itweb2.com/article/system/317.htm弗洛伊德(Floyd)演算法過程:1、用D[v][w]記錄每一對頂點的最短距離。2、依次掃描每一個點,並以其為基點再遍歷所有每一對頂點D[][]的值,看看是否可用過該基點讓這對頂點間的距離更小。演算法理解:最短距離有三
【hdu 】 Arbitrage (Floyd)
Arbitrage Time Limit : 2000/1000ms (Java/Other) Memory Limit : 65536/32768K (Java/Other) Total Submission(s) : 8 Accepted Submission(s) : 7 Problem D