問題描述
給定乙個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 行,每行描述樹上的一條邊。...