洛谷P1491 集合位置

2021-08-16 00:21:23 字數 1881 閱讀 1566

每次有大的活動,大家都要在一起「聚一聚」,不管是去好樂迪,還是避風塘,或者湯姆熊,大家都要玩的痛快。還記得心語和花兒在跳舞機上的激情與釋放,還記得草草的投籃技藝是如此的高超,還記得狗狗的槍法永遠是's'……還有不能忘了,胖子的歌聲永遠是讓我們驚叫的!!

今天是野貓的生日,所以想到這些也正常,只是因為是上學日,沒法一起去玩了。但回憶一下那時的甜蜜總是一種幸福嘛。。。

但是每次集合的時候都會出現問題!野貓是公認的「路盲」,野貓自己心裡也很清楚,每次都提前出門,但還是經常遲到,這點讓大家很是無奈。後來,野貓在每次出門前,都會向花兒諮詢一下路徑,根據已知的路徑中,總算能按時到了。

現在提出這樣的乙個問題:給出n個點的座標,其中第乙個為野貓的出發位置,最後乙個為大家的集合位置,並給出哪些位置點是相連的。野貓從出發點到達集合點,總會挑一條最近的路走,如果野貓沒找到最近的路,他就會走第二近的路。請幫野貓求一下這條第二最短路徑長度。

輸入格式:

第一行是兩個整數n(1<=n<=200)和m,表示一共有n個點和m條路,以下n行每行兩個數xi,yi,(-500<=xi,yi<=500),代表第i個點的座標,再往下的m行每行兩個整數pj,qj,(1<=pj,qj<=n),表示兩個點相通。

輸出格式:

只有一行包含乙個數,為第二最短路線的距離(保留兩位小數),如果存在多條第一短路徑,則答案就是第一最短路徑的長度;如果不存在第二最短路徑,輸出-1。

輸入樣例#1:

3 3

0 01 1

0 21 2

1 32 3

輸出樣例#1:

2.83

各個測試點1s

注:此題有毒。。。

不能用 k短路。。。

即:不能走過一條邊後又走回來。。。

坑。。。

所以,spfa,再每次刪去最短路上一條邊,跑spfa,求最小值。

附**:

#include#include#include#include#include#include#define maxn 210

#define maxm 40010

#define max 1e9

using namespace std;

int n,m,s,t,k,c=2;

int head[maxn],fa[maxn];

double ans,path[maxn];

bool flag=true,vis[maxn];

struct node1a[maxm<<1];

struct node2b[maxn];

inline int read()

while(c>='0'&&c<='9')

return date*w;

}inline double dis(int i,int j)

inline int relax(int u,int v,double w)

return 0;

}inline void add(int u,int v,double w)

void spfa()

path[s]=0;

vis[s]=true;

q.push(s);

while(!q.empty())

} }}int main()

for(int i=1;i<=m;i++)

spfa();

flag=false;ans=max;

if(path[t]==max)

for(int i=t;i!=s;i=fa[i])

for(int j=head[i];j;j=a[j].next)

}if(ans!=max)printf("%.2lf\n",ans);

else printf("-1\n");

return 0;

}

洛谷P1491集合位置

題目鏈結 就是求第乙個點到第n個點的次短路 第一次spfa用前驅記錄最短路 第二次spfa刪去最短路中的一條邊 記錄前驅開乙個pre陣列,在每次鬆弛操作時,如果d i 被更新就pre i j 表示當前到第i個點的最短路中,j是i的前驅節點 主函式中,從第n個點開始,即i n,不斷地進行找前驅i pr...

洛谷P1491集合位置

這個題說白了就是求乙個次短路。方法是我們先跑一遍最短路,記錄下最短路上每乙個點的前驅。然後我們將最短路上每一條邊都標記一次,分別跑一邊最短路,求出最短路徑即可。在這我們不用特殊判斷是否是第二條次短路還是最短路。因為我們求出的 ans 是乙個最小值。include include include in...

洛谷P1491 集合位置

題目大意 求給定的一張無向帶權圖的次短路。題解 先跑一遍 spfa 求出從起點到終點的最短路,記錄路徑。接著列舉刪邊,並重新跑 spfa,統計最小值即可。至於為什麼 dp 做法不行,暫時還不清楚。如下 include using namespace std const int maxe 2e4 10...