題目鏈結啦啦啦
首先將邊反向建立,然後bfs求出答案
1 #include2using
namespace
std;
3int
read()47
while(c>='
0'&&c<='9')
8return x*y;9}
10int
n,m;
11 vectorv[10005
];12
bool cando[10005],er[10005
];13 queueq;
14int
st,ed;
15int ans[10005
];16
intmain()
1725 st=read(),ed=read();
26 cando[ed]=1;//
第一遍bfs
27q.push(ed);
28while(!q.empty())
29//
標記從終點可以到達的點34}
35 memcpy(er,cando,sizeof(cando));//
準備第二次標記
36//
注意這裡最好有第二個陣列標記,在乙個陣列裡刪點有後效型,如果乙個點開始被標記,它通過乙個序號比它小的點刪除了,
37//
那麼訪問到它的時候,就會被當成開始就沒被標記的點,會通過它把合法點刪除。
38//
這樣做完之後,合法點都被標記了。
39for(int i=1;i<=n;i++)
40if(!cando[i])
41for(int j=0,k=v[i].size();j)
42if
(er[v[i][j]])
43 er[v[i][j]]=0;44
//最後一遍bfs找答案。
45q.push(ed);
46while(!q.empty())
4757}58
//題目要求輸出。
59if(ans[st]==0)printf("-1"
);60
else printf("%d"
,ans[st]);
61return0;
62 }
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...
P2296 尋找道路
洛谷鏈結 這個題是14年day2的第二題,也只有普及 提高的難度。題目大意就是在一堆滿足所有後繼連線的點都可以到達終點的點中,找到最短路徑。思路就是先一邊dfs,求出滿足條件1的點,之後spfa就好了,其實用bfs會更快一點。1 include2 include3 define n 10010 4 ...