在有向圖g 中,每條邊的長度均為1 ,現給定起點和終點,請你在圖中找一條從起點到終點的路徑,該路徑滿足以下條件:
1 .路徑上的所有點的出邊所指向的點都直接或間接與終點連通。
2 .在滿足條件1 的情況下使路徑最短。
注意:圖g 中可能存在重邊和自環,題目保證終點沒有出邊。
請你輸出符合條件的路徑的長度。
輸入格式:
輸入檔名為road .in。
第一行有兩個用乙個空格隔開的整數n 和m ,表示圖有n 個點和m 條邊。
接下來的m 行每行2 個整數x 、y ,之間用乙個空格隔開,表示有一條邊從點x 指向點y 。
最後一行有兩個用乙個空格隔開的整數s 、t ,表示起點為s ,終點為t 。
輸出格式:
輸出檔名為road .out 。
輸出只有一行,包含乙個整數,表示滿足題目᧿述的最短路徑的長度。如果這樣的路徑不存在,輸出- 1 。
輸入樣例#1:
3 2輸出樣例#1:1 2
2 1
1 3
-1輸入樣例#2:
6 6輸出樣例#2:1 2
1 3
2 6
2 5
4 5
3 4
1 5
3解釋1:
如上圖所示,箭頭表示有向道路,圓點表示城市。起點1 與終點3 不連通,所以滿足題
目᧿述的路徑不存在,故輸出- 1 。
解釋2:
如上圖所示,滿足條件的路徑為1 - >3- >4- >5。注意點2 不能在答案路徑中,因為點2連了一條邊到點6 ,而點6 不與終點5 連通。
對於30%的資料,0對於60%的資料,0對於100%的資料,0
/*view code先從終點到這找一遍,把不能搜到的點所連線的點設定為不能到達,
再用spfa求最短路
*/#include
#include
#include
#include
#define m 10010
#define inf 999999
using
namespace
std;
int can[m],flag[m],q[m*2
],dis[m],vis[m],n,m,s,t;
vector
v1[m];
vector
v2[m];
void dfs(intx)}
void
spfa()}}
}int
main()
scanf(
"%d%d
",&s,&t);
dfs(t);
for(int i=1;i<=n;i++)can[i]=1
;
for(int i=1;i<=n;i++)
if(!flag[i])
for(int j=0;j)
can[v2[i][j]]=0
; spfa();
if(dis[t]"%d"
,dis[t]);
else printf("-1"
);
return0;
}
洛谷 2296 尋找道路
問題描述 在有向圖g 中,每條邊的長度均為1 現給定起點和終點,請你在圖中找一條從起點到終點的路徑,該路徑滿足以下條件 1 路徑上的所有點的出邊所指向的點都直接或間接與終點連通。2 在滿足條件1 的情況下使路徑最短。注意 圖g 中可能存在重邊和自環,題目保證終點沒有出邊。請你輸出符合條件的路徑的長度...
洛谷P2296 尋找道路
在有向圖g 中,每條邊的長度均為1 現給定起點和終點,請你在圖中找一條從起點到終點的路徑,該路徑滿足以下條件 1 路徑上的所有點的出邊所指向的點都直接或間接與終點連通。2 在滿足條件1 的情況下使路徑最短。注意 圖g 中可能存在重邊和自環,題目保證終點沒有出邊。請你輸出符合條件的路徑的長度。輸入格式...
洛谷 P2296 尋找道路
題目描述 在有向圖g 中,每條邊的長度均為1 現給定起點和終點,請你在圖中找一條從起點到終點的路徑,該路徑滿足以下條件 1 路徑上的所有點的出邊所指向的點都直接或間接與終點連通。2 在滿足條件1 的情況下使路徑最短。注意 圖g 中可能存在重邊和自環,題目保證終點沒有出邊。請你輸出符合條件的路徑的長度...