poj1511解題報告(SPFA演算法)

2021-07-03 23:24:15 字數 569 閱讀 3589

題目大意:給出n個點和n條有向邊,求所有點到源點1的來回最短路之和(保證每個點都可以往返源點1)

解題思路:使用spfa+鄰接鍊錶來做,因為要求來回的最短距離之和,所以先用spfa求一遍最短路,再把每條邊反過來(a到b的邊變成b到a的邊)再用spfa求一遍最短路。

注意:結果要用long long 來儲存

#include#include#include#include#includeusing namespace std;

const int maxn=1000000+1000;

const int inf=(1<<30);

int head[2][maxn],t,vis[maxn],n,m;

long long d[maxn];

struct edge

edge[2][maxn];

void spfa(int cap)

q.push(1);

vis[1]=1;

d[1]=0;//1為起始點

while(!q.empty())}}

}}int main()

for(int i=0;i

貼個模板,POJ 1511

n個點m條邊,有向圖,求1到其餘各點的最短距離與各點到1的距離最短的路徑總和。n m 1e6 樸素必跪。dijkstra堆優化和spfa應該都能過。因為是有向圖,求1到各點的距離,直接原圖上跑spfa。求各點回到1的距離,將邊反轉 from變to to 變from 在新圖上再跑一遍spfa。8s的題...

POJ 1511 最短路徑

include include include using namespace std const int maxn 1000005 struct node node mat1 maxn mat2 maxn queueq node pool maxn 2 2 int counts long long...

POJ 1511 雙向單源最短路 SPFA 鄰接表

最近在複習最短路演算法 然後今天在看差分約束系統的時候看到了這一題poj 1511 題目的大意 給出n個點和n條有向邊,求所有點到源點1的來回最短路之和 保證每個點都可以往返源點1 題目意思很簡單,但是資料規模很大,當時知道資料規模很大,用一般的方法肯定會超時或者其他錯誤,但是還是用基礎的方法寫了一...