1.題目
題目鏈結
2.解決方法
當要求多個源點到匯點的最短路徑,可以將這些源點新增乙個虛擬的前驅結點作為虛擬源點;問題轉化為求從虛擬源點的單源最短路徑問題。
3.**
#include
#include
#include
#include
#include
using
namespace std;
const
int maxn=
1010
,maxm=
2e5+
1e4+
10,inf=
0x3f3f3f3f
;int n,m,s,num;
int dist[maxn]
;bool st[maxn]
;int e[maxm]
,h[maxn]
,ne[maxm]
,w[maxm]
,idx;
//當涉及到多個起點到其他所有點的最短路徑時,可以通過設定乙個虛擬源點解決問題,這個虛擬源點與所有起點鄰接且邊權為0
//虛擬源點到所有點的最短路徑也就是所有起點到其他點的最短路徑最小值
void
add(
int a,
int b,
int c)
intspfa()
}}}if
(dist[s]
>=inf/2)
return-1
;return dist[s];}
intmain
(void
)
cin>>num;
for(
int i=
0;i)printf
("%d\n"
,spfa()
);}return0;
}
AcWIng344 觀光之旅(floyd求最小環)
求最小環的原理是dp的思想,我們以環中最大的節點作為斷點,這樣在求floyd的過程中,在更新之前,可以用i和k以及j和k相連的兩條線路以及原先i和j在前k 1已經求出的最短路當作環進行比較 因為我們分割出了所有情況。而在求取方案的時候,我們設定乙個pos陣列,表示最短路的分割點,進行遞迴求取 inc...
選擇排序 最簡單的排序
最容易想到的排序,給你一串數字,如何按照從小到大排序。我們可以從數字中找出最小的數,把它從舊的資料中剔除,放在新陣列的第一位,然後從餘下的數字中再找出最小的,放到第二位,這樣一直找,直到原陣列還剩下一位的時候,把這一位直接放到新陣列的最後一位。我們也可以不新建陣列,沒有必要浪費這一倍的空間,在找到最...
寫好最簡單的選擇排序
選擇排序,所有排序演算法中最簡單的乙個,不是嘛,如果有哪本程式設計書中沒有直接或者間接的含有這個演算法,真的換一本吧 在此僅以此部落格記錄一下,我所認識的選擇排序。選擇排序,為什麼取這個名?之所以叫選擇排序,是因為每次都是要從剩餘的序列中選擇乙個最大 最小 的元素將其放在最終位置 有序時元素所在的位...