洛谷P2296 尋找道路 NOIP 2014

2021-08-28 18:09:53 字數 864 閱讀 7260

題目描述

這道題有個坑,雖然沒掉進去,但是沒跨過去

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

所以就需要建反圖 來刪去一些沒用的點

從終點倒著找 搜尋不到的點就刪去 與這些點直接相連的點也刪去

要注意做標記的時候 要用乙個新的陣列 以防其他的被改變

還有就是陣列模擬鄰接表的應用

看**吧

#include#include#includeusing namespace std;

int b[10050],q[2000050],st[10050],h[10050],f[10050],f2;

struct road

;road edge[2000050];

void bfs1(int x)

ha++; }}

void bfs2(int x,int y)

cin>>s>>t; bfs1(t);//找到從終點能遍歷的點

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

if(b[i]==1)

for(j=h[i];j>0;j=edge[j].next)

f[edge[j].to]=1;//找到與刪去的點直接相連的點

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

if(b[i]==0&&f[i]==1)

b[i]=1;//結合兩個標記

bfs2(t,s);//從終點開始找最短路徑

if(f2==0) cout<<"-1";

fclose(stdin); fclose(stdout);

return 0;

}

洛谷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...