計蒜客習題 迷陣突圍

2021-08-16 17:21:09 字數 1797 閱讀 2086

蒜頭君陷入了座標系上的乙個迷陣,迷陣上有 n 個點,編號從 1 到 n。蒜頭君在編號為 1 的位置,他想到編號為 n 的位置上。蒜頭君當然想盡快到達目的地,但是他覺得最短的路徑可能有風險,所以他會選擇第二短的路徑。現在蒜頭君知道了 n 個點的座標,以及哪些點之間是相連的,他想知道第二短的路徑長度是多少。

注意,每條路徑上不能重複經過同乙個點。

輸入格式

第一行輸入兩個整數 n (1≤n≤200) 和 m,表示一共有 n 個點和 m 條邊。

接下來輸入 n 行,每行輸入兩個整數xi,yi(−500≤xi,yi≤500),代表第 ii 個點的座標。

接下來輸入 mm 行,每行輸入兩個整數 pj,qj(1≤pj,qj≤n),表示點pj和點 qj之間相連。

輸出格式

輸出一行,輸出包含乙個數,表示第二短的路徑長度(小數點後面保留兩位),如果第一短路徑有多條,則答案就是第一最短路徑的長度;如果第二最短路徑不存在,則輸出 −1。

樣例輸入

3 3

1 1

2 2

3 2

1 2

2 3

1 3

樣例輸出

2.41

原文傳送門

#include

#include

#include

#include

#include

#include

using

namespace

std;

const

int maxn=207;

const

int maxm=50007; //207*207 可能有重邊 所以再開大一些 不給資料範圍是真的睿智

int n,m;

int x[maxn],y[maxn],fa[maxn],q[maxn];

double w(int u,int v);

struct edgee[maxm<<1]; //睿智了 打成了maxn

int p[maxn],eid;

double dist[maxn];

double ans=99999999;

bool vst[maxn];

//int id[maxn][maxn];

typedef pair pdi;

set >min_heap;

void dijkstra(int a,int b);

void ins(int u,int v);

void ins2(int u,int v);

void init();

int main()

int now=n;

dijkstra(-1,-1);

while(fa[now])

if(ans==99999999) printf("-1");

else

printf("%.2lf",ans);

return

0;

} double w(int u,int v)

void dijkstra(int a,int b)

} }

} void ins(int u,int v)

void ins2(int u,int v) //無向邊插兩次

void init()

計蒜客習題 朋友

在社交的過程中,通過朋友,也能認識新的朋友。在某個朋友關係圖中,假定 a 和 b 是朋友,b 和 c 是朋友,那麼 a 和 c 也會成為朋友。即,我們規定朋友的朋友也是朋友。現在,已知若干對朋友關係,詢問某兩個人是不是朋友。請編寫乙個程式來解決這個問題吧。輸入格式 第一行 三個整數 n,m,p n ...

計蒜客習題 逃跑

一位博主寫了ac 但是無論是廣度bfs還是深度dfs,都會報錯,dfs是執行超時,bfs是答案錯誤。傳送門 另一位博主使用了dfs 有興趣可以看下,沒有檢驗是否正確,傳送門 根據前位博主的bfs 做了幾項修改,然後用自己的 找錯前位博主,發現找不出來,有興趣的小夥伴可以試下,找一下前位博主的錯誤。當...

計蒜客習題 蒜廠年會

蒜廠要開年會了,所有的員工都要參加。每兩個員工之間都有乙個親密度。在同乙個專案工作過的員工之間的親密度為 1。如果 a 和 b b 和 c 均在同乙個專案中工作過,而 a 和 c 沒有,那麼 a 和 c 之間的親密度為 1 1 2。同理,如果 a 和 b 之間的親密度為 x,b 和 c 之間的親密度...