題意:在有向圖 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...