問題描述
給定乙個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 輸入第一行給出測試資料...