蒜頭君陷入了座標系上的乙個迷陣,迷陣上有 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 之間的親密度...