在有向圖 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 2output1 22 1
1 3
-1explanation
起點1'>1
1與終點3
'>3
3不連通,所以滿足題目描述的路徑不存在,故輸出−
1'>−1
−1。input
6 6output1 21 3
2 62 5
4 53 4
1 5
3explanation
注意點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...
尋找合適自己的道路
很高興今天在這裡寫部落格 也很杯具現在才在這裡寫部落格 在公司呆了三年,發現自己似乎除了經驗其他沒有學到什麼,但在大公司工作就是這樣,你只是乙個螺絲,因此有時候你找不到自己的價值,但在必定要受制於人,並且還要處處看老大臉色,為了得到好的績效,還必須要時刻去做一些自己不喜歡做的事情。其實工作沒有是順心...