題解 P2296 尋找道路

2022-03-26 05:49:44 字數 1105 閱讀 8261

在有向圖 \(g\) 中,每條邊的長度均為 \(1\),現給定起點和終點,請你在圖中找一條從起點到終點的路徑,該路徑滿足以下條件:

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

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

注意:圖 gg 中可能存在重邊和自環,題目保證終點沒有出邊。

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

這道題,我們考慮哪些點能夠到達終點,問題等價於:反向建邊後,終點能到達哪些點。

void dfs(int x)
\(e\) 正是反向建邊後的邊集。

\(h_x=1\) 就表示 \(x\) 號點能到終點。

所以,我們可以判斷哪些點可以走了。

能經過的點要滿足 \(2\) 個條件:

它自己能到達終點

它的出邊所指向的點都能達到終點

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

if(h[i])

}

這部做完了,就可以開始 \(bfs\) 了。

邊權全都是 \(1\) 自然是第 \(1\) 次搜到的就是最優解。

q.push((node));

while(q.size())

struct node;

bool h[10010],vis[10010];

int n,m,dis[10010],s,t;

vectorv[10010];

vectore[10010];

queueq;

void dfs(int x)

int main()

read(s);read(t);

dfs(t);

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

if(h[i])

} q.push((node));

while(q.size())

for(auto i:v[x.x])

if(dis[i]&&!vis[i]));

}q.pop();

}cout<<-1;

return 0;

}

題解 P2296 尋找道路

寫在前面 在窩的部落格食用口感更佳 這應該是2019csp之前寫的最後一篇題解吧 關於碼風等細節說明 思路 詳細解析 就是因為條件一導致我不得套板子 我要把條件一吞掉 怎麼吞呢?我們只保留那些所有出邊所指向的點都直接或間接與終點連通的點即可 我們可以反向建圖,從終點出發跑一邊dijkstra 這樣所...

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