洛谷P2296 尋找道路

2022-09-07 10:42:09 字數 1215 閱讀 6215

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

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

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

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

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

少有的題意簡明的題目

解法:反向建圖,bfs終點到源點的,記錄每個點正的度數和反的度數,比較後如果兩邊相等就把正的圖建出。最後bfs

#include#include

#include

using

namespace

std;

const

int maxn=10005,maxm=200005

;struct edgeedge[maxm];

struct edgeedge[maxm];

int n,m,s,t,n_e,head[maxn],cnt[maxn][2

],dis[maxn];

bool

vis[maxn];

void spfa(int

x);void bfs(int

x);void addedge(int

from,int

to);

intmain()

cin>>s>>t;

bfs(t);

cnt[s][

1]=cnt[s][0]; cnt[t][1]=cnt[t][0

]; memset(edge,

0,sizeof(edge)); memset(head,0,sizeof

(head));

memset(vis,

0,sizeof(vis)); memset(dis,0x7f,sizeof

(dis));

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

spfa(s);

if(dis[t]==dis[0

]) cout

<<"-1"

;

else

cout

}void addedge(int

from,int

to)void bfs(intx)}

void spfa(int

x) }}}

}

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