UOJ 19 尋找道路

2022-02-27 11:20:33 字數 2920 閱讀 8788

在有向圖 g

'>g

g 中,每條邊的長度均為 1

'>1

1,現給定起點和終點,請你在圖中找一條從起點到終點的路徑,該路徑滿足以下條件:

路徑上的所有點的出邊所指向的點都直接或間接與終點連通。

在滿足條件 1 的情況下使路徑最短。

注意:圖 g

'>g

g 中可能存在重邊和自環,題目保證終點沒有出邊。

請你輸出符合條件的路徑的長度。

第一行有兩個用乙個空格隔開的整數 n

'>n

n 和 m

'>m

m,表示圖有 n

'>n

n 個點和 m

'>m

m 條邊。

接下來的 m

'>m

m 行每行 2

'>2

2 個整數 x,y

'>x,y

x,y,之間用乙個空格隔開,表示有一條邊從點 x

'>x

x 指向點y

'>y

y。最後一行有兩個用乙個空格隔開的整數 s,t

'>s,t

s,t,表示起點為 s

'>s

s,終點為 t

'>t

t。輸出只有一行,包含乙個整數,表示滿足題目描述的最短路徑的長度。如果這樣的路徑不存在,輸出−

1'>−1

−1。input

3 2

1 22 1

1 3

output
-1
explanation

起點1'>1

1與終點3

'>3

3不連通,所以滿足題目描述的路徑不存在,故輸出−

1'>−1

−1。input

6 6

1 21 3

2 62 5

4 53 4

1 5

output
3
explanation

注意點2

'>2

2不能在答案路徑中,因為點2

'>2

2連了一條邊到點6

'>6

6,而點6

'>6

6不與終點5

'>5

5連通。

對於30%的資料,0

10'>0

0020'>0

0對於60%的資料,0

100'>0

002000

'>0

0對於100%的資料,0

10000

'>0

00200000

'>0

00y,s,

t≤n'>0

s≠t'>x,s≠t

x,s≠t。

時間限制:1

s'>1s

1s記憶體限制:128

mb'>128mb

本來思路是 「反向存圖+終點spfa+額外判斷」 求合法點集,然後 「起點spfa」 求最短路。

結果一波掛殘,20分 = =

後來決定用終點做根樸素dfs判斷合法點集,再次20分 = =

關鍵在合法點集,根據樣例合法點集內的點每一條出邊都需要能到達終點,那麼像樣例2中的結點2是不能包括進合法點集的,此處需要注意實現部分。

1 #include2 #include3 #include4

#define maxn 500000

5using

namespace

std;67

struct

edgee[maxn],e1[maxn];

1011

const

int inf = 999999999;12

13int n,m,a,b,que[maxn*100

],head,tail,s,t,dis[maxn];

14bool

book[maxn],chose[maxn];

15int

tot,tot1,first[maxn],first1[maxn];

16void insert(int u,int

v)22

23void insert1(int u,int

v)29

30void dfs(int

now)37}

38}3940

void

print()

4546

void

spfa()

66 }book[p] = false;67

}6869//

print();

7071

if(dis[t] < inf) printf("%d"

,dis[t]);

72else printf("-1"

);73}74

75int

main()

8283 scanf("

%d%d

",&s,&t);

8485 book[t] = true;86

dfs(t);

8788 memset(chose,true,sizeof

(chose));

8990

for(int i = 1;i <= n;i++)97}

98}99100

//cout << "----------------------------" << endl;

101for(int i = 1;i <= n;i++)

109}

110}

111112

//for(int i = 1;i <= n;i++)

116117

spfa();

118119

return0;

120 }

死於細節

noip尋找道路

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

2023年 尋找道路

兩遍bfs 將邊反向 第一遍bfs搜尋t能到達的的點,標記不能到的點 將t不能到達的點的相鄰點標記不能到達 第二遍bfs尋找通過能到的點到達s點的最短距離 感覺用鄰接矩陣有點危險,就順便練了一下邊表 include include using namespace std intn,m,s,t,x,y...

尋找合適自己的道路

很高興今天在這裡寫部落格 也很杯具現在才在這裡寫部落格 在公司呆了三年,發現自己似乎除了經驗其他沒有學到什麼,但在大公司工作就是這樣,你只是乙個螺絲,因此有時候你找不到自己的價值,但在必定要受制於人,並且還要處處看老大臉色,為了得到好的績效,還必須要時刻去做一些自己不喜歡做的事情。其實工作沒有是順心...