SDUT 2498AOE網上的關鍵路徑

2021-08-04 17:01:57 字數 1697 閱讀 1327

time limit: 1000ms

memory limit: 65536kb

submit

statistic

discuss

problem description

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

directed acyclic graph

),簡稱

dag圖。

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

如上所示,共有11

項活動(11

條邊),9

個事件(9

個頂點)。整個工程只有乙個開始點和乙個完成點。即只有乙個入度為零的點(源點)和只有乙個出度為零的點(匯點)。

關鍵路徑:是從開始點到完成點的最長路徑的長度。路徑的長度是邊上活動耗費的時間。如上圖所示,1 

到2 到 5

到7到9

是關鍵路徑(關鍵路徑不止一條,請輸出字典序最小的),權值的和為18。

input

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

組,保證只有乙個源點和匯點。輸入乙個頂點數n(2<=n<=10000),

邊數m(1<=m <=50000),

接下來m

行,輸入起點sv

,終點ev,

權值w(1<=sv,ev<=n,sv != ev,1<=w <=20)

。資料保證圖連通。

output

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

example input

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

example output

18

1 22 5

5 77 9

題目所需知識點:spfa演算法

坑點:源點編號就是1,匯點編號就是n,通過判斷入度和出度找到的源點和匯點反而wa了

# include using namespace std;

const int maxn=5*1e4+10;

const int maxx=int_max;

int head[maxn];

struct node

z[maxn];///邊起點,邊長,下一條邊的編號

int distance[maxn];///路徑長記錄陣列

bool vis[maxn];

int n, m;

int cnt;

int pre[maxn];///記錄到達某點需到達的前乙個點

int s, e;

void add(int a, int b, int c)

///逆儲存

void spfa()}}

}}int main()

s=1;

e=n;

spfa();

cout<

SDUT 2498 AOE網上的關鍵路徑

大體就是spfa逆向建圖,然後通過入出度的關係找出原點和匯點,主要是將關鍵路徑上的點輸出,用乙個pre陣列 存下來,輸出即可。include include include include include include include include include include define ...

SDUT 2498 AOE網上的關鍵路徑

time limit 1000ms memory limit 65536kb submit statistic problem description 乙個無環的有向圖稱為無環圖 directed acyclic graph 簡稱 dag圖。aoe activity on edge 網 顧名思義,用...

AOE網上的關鍵路徑

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