藍橋杯練習題 最短距離

2021-06-20 16:43:16 字數 1626 閱讀 4336

問題描述

給定乙個n個頂點,m條邊的有向圖(其中某些邊權可能為負,但保證沒有負環)。請你計算從1號點到其他點的最短路(頂點從1到n編號)。

輸入格式

第一行兩個整數n, m。

接下來的m行,每行有三個整數u, v, l,表示u到v有一條長度為l的邊。

輸出格式

共n-1行,第i行表示1號點到i+1號點的最短路。

樣例輸入

3 31 2 -1

2 3 -1

3 1 2

樣例輸出

-1-2

資料規模與約定

對於10%的資料,n = 2,m = 2。

對於30%的資料,n <= 5,m <= 10。

對於100%的資料,1 <= n <= 20000,1 <= m <= 200000,-10000 <= l <= 10000,保證從任意頂點都能到達其他所有頂點。

#include#include#include#include#include#include#include#includeusing namespace std;

const int maxn = 20005;

const int inf = 1<<30;

int n,m,pos;

struct node

edge[maxn*15];

int head[maxn];

int dis[maxn];

bool vis[maxn];

void add( int u,int v,int w )

typedef pairpii;

void dijkstra( int s )

} }}int main()

dijkstra(1);

for( int i = 2; i <= n; i ++ )

printf("%d\n",dis[i]);

return 0;

}

#include#include#include#include#include#include#include#includeusing namespace std;

const int maxn = 20005;

const int inf = 1<<30;

int n,m,pos;

struct node

edge[maxn*15];

int head[maxn];

int dis[maxn];

bool vis[maxn];

void add( int u,int v,int w )

void spea( int s )

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

dis[i] = inf;

dis[s] = 0;

que.push(s);

while( !que.empty() )

}} }

}int main()

spea(1);

for( int i = 2; i <= n; i ++ )

printf("%d\n",dis[i]);

return 0;

}

1407 最短距離

兩個點 a b 均在做勻速直線運動。給出 t 0時刻 a b 的座標,以及 a b 的速度,計算t 0時兩個點的距離的最小值。輸入的第一行包含乙個整數 t 1 t 200 表示一共有 t 組測試資料。對於每組測試資料,第一行包含4個整數 x a y a v ax v ay 103 x a y a v...

編輯最短距離

給定兩個字串s和t,對於t我們允許三種操作 1 在任意位置新增任意字元 2 刪除存在的任意字元 3 修改任意字元 問最少操作多少次可以把字串t變成s?例如 s abcf t dbfg 那麼我們可以 1 把d改為a 2 刪掉g 3 加入c 所以答案是3。1 把t中字元全刪了,再新增s的全部字元,操作次...

素數最短距離問題

素數距離問題 時間限制 3000 ms 記憶體限制 65535 kb 難度 2 描述現在給出你一些數,要求你寫出乙個程式,輸出這些整數相鄰最近的素數,並輸出其相距長度。如果左右有等距離長度素數,則輸出左側的值及相應距離。如果輸入的整數本身就是素數,則輸出該素數本身,距離輸出0 輸入第一行給出測試資料...