1. 程式人生 > >GYM 101653 W.Wormhole(Floyd)

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.WormholeFloyd

Description 給出n個星球的名稱和三維座標,距離定義為歐氏距離,其中有m對星球之間存在蟲洞,那麼這對星球之間距離為0,q次查詢,每次查詢一對星球之間的最短距離 Input 第一行一整數T表示用例組數,每組用例首先輸入一整數n表示星球數量,之後輸入

GYM 101653 V.Towersdfs

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 Graphfloyd

body efi clu long 循環 一次 暴力 矩陣 最短距離 Description 題意:給定一個有向圖,一共有N個點,給鄰接矩陣。依次去掉N個節點,每一次去掉一個節點的同時,將其直接與當前節點相連的邊和當前節點連出的邊都需要去除,輸出N個數,表示去掉當前節點之前

POJ 1217 Arbitragefloyd

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 Outfloyd

題目: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 GraphFloyd

  題意: 給你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