Algo 5 結點選擇

2021-09-10 14:28:25 字數 1217 閱讀 9956

問題描述

給定乙個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,保證從任意頂點都能到達其他所有頂點。

問題分析:使用spfa演算法解決 

spfa演算法可以解決帶負權的單源最短路徑問題,並且能夠判斷是否存在負權環

dijkstra演算法只能解決不帶負權的單源最短路徑問題

#include #include #include #include using namespace std;

const int maxd = 0xfffffff;

const int maxn = 20000+5;

struct edge

};vectore[maxn];

int dis[maxn];

int vis[maxn]; //用於記錄該結點當前是否在隊中。0為不在。元素一出隊vis立刻置為0,根據vis判斷下乙個結點是否應入隊。vis的這種策略可以反映元素的情況,無需自定義佇列的查詢函式

int num[maxn]; //用於記錄該點入隊了幾次,如果大於n說明存在負權環

queueq;

int n,m,u,v,l;

bool spfa()

} } }

return res;

}int main()

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

dis[i] = maxd;

memset(num,0,sizeof(num));

memset(vis,0,sizeof(vis));

if(spfa()) }

return 0;

}

藍橋杯ALGO 04 結點選擇

問題描述 有一棵 n 個節點的樹,樹上每個節點都有乙個正整數權值。如果乙個點被選擇了,那麼在樹上和它相鄰的點都不能被選擇。求選出的點的權值和最大是多少?輸入格式 第一行包含乙個整數 n 接下來的一行包含 n 個正整數,第 i 個正整數代表點 i 的權值。接下來一共 n 1 行,每行描述樹上的一條邊。...

藍橋杯 ALGO 4 結點選擇

演算法訓練 結點選擇 時間限制 1.0s 記憶體限制 256.0mb 問題描述 有一棵 n 個節點的樹,樹上每個節點都有乙個正整數權值。如果乙個點被選擇了,那麼在樹上和它相鄰的點都不能被選擇。求選出的點的權值和最大是多少?輸入格式 第一行包含乙個整數 n 接下來的一行包含 n 個正整數,第 i 個正...

樹形DP 藍橋杯 ALGO 4 結點選擇

問題描述 有一棵 n 個節點的樹,樹上每個節點都有乙個正整數權值。如果乙個點被選擇了,那麼在樹上和它相鄰的點都不能被選擇。求選出的點的權值和最大是多少?輸入格式 第一行包含乙個整數 n 接下來的一行包含 n 個正整數,第 i 個正整數代表點 i 的權值。接下來一共 n 1 行,每行描述樹上的一條邊。...