P2296 尋找道路

2022-08-18 22:30:12 字數 1177 閱讀 7813

題目鏈結啦啦啦

首先將邊反向建立,然後bfs求出答案

1 #include2

using

namespace

std;

3int

read()47

while(c>='

0'&&c<='9')

8return x*y;9}

10int

n,m;

11 vectorv[10005

];12

bool cando[10005],er[10005

];13 queueq;

14int

st,ed;

15int ans[10005

];16

intmain()

1725 st=read(),ed=read();

26 cando[ed]=1;//

第一遍bfs

27q.push(ed);

28while(!q.empty())

29//

標記從終點可以到達的點34}

35 memcpy(er,cando,sizeof(cando));//

準備第二次標記

36//

注意這裡最好有第二個陣列標記,在乙個陣列裡刪點有後效型,如果乙個點開始被標記,它通過乙個序號比它小的點刪除了,

37//

那麼訪問到它的時候,就會被當成開始就沒被標記的點,會通過它把合法點刪除。

38//

這樣做完之後,合法點都被標記了。

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

40if(!cando[i])

41for(int j=0,k=v[i].size();j)

42if

(er[v[i][j]])

43 er[v[i][j]]=0;44

//最後一遍bfs找答案。

45q.push(ed);

46while(!q.empty())

4757}58

//題目要求輸出。

59if(ans[st]==0)printf("-1"

);60

else printf("%d"

,ans[st]);

61return0;

62 }

P2296 尋找道路

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

P2296 尋找道路

反著建圖,從點 include include include define ri register int using namespace std const int maxn 200020,inf 1310668019 int n,m,s,t,u maxn v maxn w maxn fst m...

P2296 尋找道路

洛谷鏈結 這個題是14年day2的第二題,也只有普及 提高的難度。題目大意就是在一堆滿足所有後繼連線的點都可以到達終點的點中,找到最短路徑。思路就是先一邊dfs,求出滿足條件1的點,之後spfa就好了,其實用bfs會更快一點。1 include2 include3 define n 10010 4 ...