AOE網上的關鍵路徑 (SPFA 前向星)

2021-07-16 22:43:59 字數 2194 閱讀 7773

time limit: 1000ms memory limit: 65536k

乙個無環的有向圖稱為無環圖(

directed acyclic graph

),簡稱

dag圖。

aoe(activity on edge)網:顧名思義,用邊表示活動的網,當然它也是dag。與aov不同,活動都表示在了邊上,如下圖所示:

如上所示,共有11項活動(11條邊),9個事件(9個頂點)。整個工程只有乙個開始點和乙個完成點。即只有乙個入度為零的點(源點)和只有乙個出度為零的點(匯點)。

關鍵路徑:是從開始點到完成點的最長路徑的長度。路徑的長度是邊上活動耗費的時間。如上圖所示,1到2 到 5到7到9是關鍵路徑(關鍵路徑不止一條,請輸出字典序最小的),權值的和為18。

這裡有多組資料,保證不超過

10組,保證只有乙個源點和匯點。輸入乙個頂點數

n(2<=n<=10000),邊數

m(1<=m <=50000),接下來

m行,輸入起點

sv,終點

ev,權值

w( 1<=sv,ev<=n,sv != ev,1<=w <=20)。資料保證圖連通。

關鍵路徑的權值和,並且從源點輸出關鍵路徑上的路徑(如果有多條,請輸出字典序最小的)。

9 11

1 2 6

1 3 4

1 4 5

2 5 1

3 5 1

4 6 2

5 7 9

5 8 7

6 8 4

8 9 4

7 9 2

18

1 22 5

5 77 9

思路:邊數點數略大,用鄰接矩陣目測會超。果斷前向星儲存(不會用鄰接表的渣比,sad)。aov網是求最長路徑,所以不能和以前一樣,現在要把dis初始化成-inf,同時也要記得字典序輸出(sad,就忘記這個地方了,忘對他優化)。看的財神的部落格發現對於字典序輸出倒序建圖,當鬆弛時(u,v),遇到相同的情況,盡量使u變的更小,那麼最終得到就是最小的字典序。

[html]view plain

copy

#include 

<

stdio.h

>

#include <

string.h

>

#include <

stdlib.h

>

#include <

algorithm

>

#include <

iostream

>

#include <

queue

>

using namespace std;  

#define inf 0x3f3f3f3f  

struct node  

edge[50010];  

int dis[10010];//儲存最長路徑;  

int vis[10010];//該點是否訪問過;  

int head[10010];  

int father[50010];//儲存前乙個的起點  

int site[50010];  

int in[50010],out[50010];//入度,出度,找起始點和終止點  

int cnt;  

void add(int u,int v,int w)  

void spfa(int s,int e)  

}  }  }  

printf("%d\n",dis[e]);  

int num=0

;  for(i=e

;i!=inf;i=

father

[i])  

site[num++]=i;  

for(i=1

;i<

num;i++)  

printf("%d %d\n",site[i-1],site[i]);  

}  int main()  

for(i=1

;i<

=n;i++)  

spfa(u,v);  

}  return 0;  

}  

AOE網上的關鍵路徑 (SPFA 前向星)

time limit 1000ms memory limit 65536k 乙個無環的有向圖稱為無環圖 directed acyclic graph 簡稱 dag圖。aoe activity on edge 網 顧名思義,用邊表示活動的網,當然它也是dag。與aov不同,活動都表示在了邊上,如下圖所...

AOE網上的關鍵路徑

求關鍵路徑 1 輸入e條弧,建立aoe 網的儲存結構 2 從源點v0出發,令ve 0 0,按拓撲有序求其各頂點的最早發生時間ve i 1 i n 1 如果得到的拓撲有序序列中頂點個數小於頂點數n,則說明網中存在環,不能求關鍵路徑,演算法終止 否則執行步驟 3 3 從匯點vn出發,令vl n 1 ve...

AOE網上的關鍵路徑

time limit 1000ms memory limit 65536k 乙個無環的有向圖稱為無環圖 directed acyclic graph 簡稱 dag圖。aoe activity on edge 網 顧名思義,用邊表示活動的網,當然它也是dag。與aov不同,活動都表示在了邊上,如下圖所...