有n個孩子,m個關係;關係分別有3個數u,v,w。代表v的糖果數不能多於u w個,也就是dis[v]<=dis[u]+w;這就轉換成
if(dis[v]>dis[u]+w) dis[v]=dis[u]+w.
1:spfa+stack
#include#include#include#include#includeconst int maxn=150050; //15w條邊
const int inf=0x3f3f3f3f;
using namespace std;
struct edge
e[maxn];
const int n=50050; //5w個點
int head[n],vis[n];
int dis[n];
int j,n,m;
void init() //初始化
void add(int u,int v,int w) //前向星優化存圖
void spfa(int s) }}
}int main()
spfa(1);
cout<2:heap_dijkstra
#include#include#include#include#includeusing namespace std;
const int inf=0x3f3f3f3f;
const int maxn=150050; //15w條邊
const int n=30050; //3w個點
int n,m,cnt;
int head[n],dis[n],vis[n];
struct edge
e[maxn];
struct node
bool operator <(const node &r)const
};void init()
void add(int u,int v,int w)
void heap_dijkstra(int s)
); //s為定點編號,0為最短距離
while(!que.empty()));}
}}
}int main()
heap_dijkstra(1);
cout<3:heap_dijkstra 的pair表示
#include#include#include#include#includeusing namespace std;
typedef pairp; //first最短距離,second定點編號
const int inf=0x3f3f3f3f;
const int maxn=150050; //15w條邊
const int n=30050; //3w個點
int n,m,cnt;
int head[n],dis[n],vis[n];
struct edge
e[maxn];
void init()
void add(int u,int v,int w)
void heap_dijkstra(int s)
); //0為最短距離,s為定點編號
while(!que.empty()));}
}}
}int main()
heap_dijkstra(1);
cout
}
2018 08 07 最短路徑 差分約束
在每年的校賽裡,所有進入決賽的同學都會獲得一件很漂亮的t shirt。但是每當我們的工作人員把上百件的衣服從商店運回到賽場的時候,卻是非常累的!所以現在他們想要尋找最短的從商店到賽場的路線,你可以幫助他們嗎?輸入包括多組資料。每組資料第一行是兩個整數n m n 100,m 10000 n表示成都的大...
差分約束系統 變相的最短路
之前沒有細看,想不明白這個問題怎麼和最短路扯上關係,細細看了看,也沒明白,原因是在看dijk演算法的時候就沒好搞明白它的 實現,以至於這個問題模擬到最短路實現的時候一臉懵,還去瞅了瞅三角不等式是什麼東西,簡單來說,難就難在圖的構造上面,構造好圖之後就是模板,就是之前的內容了,一起看看這個東西吧,on...
差分約束和dp和最短路
我發現學的越深入,各個知識點之間的關係真的就是越緊密,我希望有一天我能學習完所有的演算法,站在演算法的頂端俯瞰各個演算法之間的聯絡,感受演算法之美,感受邏輯之美,想想那時候是多麼的驕傲和自豪啊。很久之前做過的一道題目,當時做的時候是跟著老師的思路來做的,當時並沒有多大的啟發,但是後邊我在看一遍的時候...