codevs3731 luogu2296 尋找道路

2021-08-08 06:21:27 字數 2370 閱讀 4040

在有向圖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 2

2 1

1 3

輸出樣例#1:

-1
輸入樣例#2:

6 6  

1 2

1 3

2 6

2 5

4 5

3 4

1 5

輸出樣例#2:

3
解釋1:

如上圖所示,箭頭表示有向道路,圓點表示城市。起點1 與終點3 不連通,所以滿足題

目敘述的路徑不存在,故輸出- 1 。

解釋2:

如上圖所示,滿足條件的路徑為1 - >3- >4- >5。注意點2 不能在答案路徑中,因為點2連了一條邊到點6 ,而點6 不與終點5 連通。

對於30%的資料,0對於60%的資料,0對於100%的資料,0

圖論第二題

課件裡面給出的標算是bfs求最短路

【不知道怎麼寫bfs的心痛

於是開始自己折騰

考慮再建立乙個反向的圖

從終點做一遍dijkstra

找出終點走不到的點

將出邊指向這些點的點標記

從起點做dijkstra

不選被標記的點

寫起來很流暢

可調bug用了很長時間

每次調bug都會有很深的體會

1、賦初值真的要細緻

2、dijkstra一開始千萬不要寫vis[sx]=1;【wa了很多次

3、memset函式將dis陣列初始化為無窮大0x7f 事實0x7f直接輸出為127 在判斷點與終點是否相通時 不能把dis[i]與0x7f直接比較

4、出邊指向某一特殊點的點不止乙個 所以pre陣列不能簡單的定義為一維陣列 可考慮結構體一維陣列裡面分裝vector

嗯…codevs上ac了 luogu上t了乙個點

可能是dijkstra沒寫堆優化吧【事實上已經不會寫堆了…

明天繼續加油吧

#include#define maxn 10001

#define maxm 200001

using namespace std;

template void read(t &x)

int to1[maxm],nxt1[maxm],head1[maxn],total1;//正搜

int to2[maxm],nxt2[maxm],head2[maxn],total2;//反搜

int dis[maxn];

//int pre[maxn];

bool vis[maxn];

bool flag[maxn];

int n,m;

int sx,ex;

struct nodepre[maxn];

void add1(int u,int v)

void add2(int u,int v)

void dijkstra1(){

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

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

memset(flag,0,sizeof(flag));

dis[ex]=0;

for(int ti=1;ti<=n;++ti){

int jd=-1;

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

if(!vis[i]&&(jd==-1||dis[i]maxm){

//cout

codevs 3731 尋找道路

題目描述 description 在有向圖g中,每條邊的長度均為1,現給定起點和終點,請你在圖中找一條從起點到終點的路徑,該路徑滿足以下條件 1 路徑上的所有點的出邊所指向的點都直接或間接與終點連通。2 在滿足條件1的情況下使路徑最短。注意 圖g中可能存在重邊和自環,題目保證終點沒有出邊。請你輸出符...

尋找道路(codevs 3731)題解

問題描述 在有向圖 g 中,每條邊的長度均為 1,現給定起點和終點,請你在圖中找一條從起點到 終點的路徑,該路徑滿足以下條件 路徑上的所有點的出邊所指向的點都直接或間接與終點連通。在滿足條件 1 的情況下使路徑最短。注意 圖 g 中可能存在重邊和自環,題目保證終點沒有出邊。請你輸出符合條件的路徑的長...

尋找道路(codevs 3731)題解

在有向圖 g 中,每條邊的長度均為 1,現給定起點和終點,請你在圖中找一條從起點到 終點的路徑,該路徑滿足以下條件 路徑上的所有點的出邊所指向的點都直接或間接與終點連通。在滿足條件 1 的情況下使路徑最短。注意 圖 g 中可能存在重邊和自環,題目保證終點沒有出邊。請你輸出符合條件的路徑的長度。3 2...