洛谷 P2296 尋找道路

2022-06-01 10:57:09 字數 1136 閱讀 9210

思路 :首先既然要滿足第乙個條件,我們可以建反向邊,從起點出發走反向邊,標記所能到達的點。沒有被標記過的點就把他的父親(誰到它的點)和它本身給標記為不可到達,然後就求最短路,如果碰到標記為不可到達的點,就continue,最後dis[e]就是答案。

** :

1 #include 2

#define inf 0x3f3f3f3f

3using

namespace

std;

4int n, m, head[10001], head1[10001], dis[10001], vis[10001], no[10001], mark[10001

], num, num1, s, e;

5struct

node

6stu[200001], stu1[200001

];9 inline void add(int x, int y, int z)//

正向邊

1017 inline void add1(int x, int y, int z)//

反向邊

1825 inline void dfs(int u)//

從終點dfs搜尋能到達的點

2635}36

return;37

}38 inline void spfa(int s)//

求最短路

3958

if(dis[k] > dis[u] +stu[i].val)

5966}67

}68}69

return;70

}71signed main()

7280 scanf("

%d %d

", &s, &e);

81dfs(e);

82 mark[e] = 1;//

記得把終點標記為搜到了

83for(register int u = 1; u <= n; ++u)//

搜尋所有點

8493}94

}95spfa(s);

96 printf(dis[e] == inf ? "

-1" : "%d"

, dis[e]);

97return0;

98 }

洛谷P2296 尋找道路

在有向圖g 中,每條邊的長度均為1 現給定起點和終點,請你在圖中找一條從起點到終點的路徑,該路徑滿足以下條件 1 路徑上的所有點的出邊所指向的點都直接或間接與終點連通。2 在滿足條件1 的情況下使路徑最短。注意 圖g 中可能存在重邊和自環,題目保證終點沒有出邊。請你輸出符合條件的路徑的長度。輸入格式...

洛谷 P2296 尋找道路

題目描述 在有向圖g 中,每條邊的長度均為1 現給定起點和終點,請你在圖中找一條從起點到終點的路徑,該路徑滿足以下條件 1 路徑上的所有點的出邊所指向的點都直接或間接與終點連通。2 在滿足條件1 的情況下使路徑最短。注意 圖g 中可能存在重邊和自環,題目保證終點沒有出邊。請你輸出符合條件的路徑的長度...

洛谷 P2296 尋找道路

題目大意 在乙個有向圖中找出2點之間的最短路,並且路徑上的所有點的出邊所指向的點都直接或間接與終點連通。題解 spfa 佇列 dfs 1.從終點方向搜,把終點能到的點標記可到達。2.把終點能到達的點的出邊判斷,如果出邊未被標記則狀態更新為不可到達。3.做spfa,若t i 可以到達就做,不然不做。v...