USACO 4 3 街道賽跑 推理 深搜

2022-03-03 07:07:38 字數 2044 閱讀 2854

圖一表示一次街道賽跑的跑道。可以看出有一些路口(用 0 到 n 的整數標號),和連線這些路口的箭頭。路口 0 是跑道的起點,路口 n 是跑道的終點。箭頭表示單行道。運動員們可以順著街道從乙個路口移動到另乙個路口(只能按照箭頭所指的方向)。當運動員處於路口位置時,他可以選擇任意一條由這個路口引出的街道。

圖一:有 10 個路口的街道

乙個良好的跑道具有如下幾個特點:

每乙個路口都可以由起點到達。

從任意乙個路口都可以到達終點。

終點不通往任何路口。

運動員不必經過所有的路口來完成比賽。有些路口卻是選擇任意一條路線都必須到達的(稱為「不可避免」的)。在上面的例子中,這些路口是 0,3,6,9。對於給出的良好的跑道,你的程式要確定「不可避免」的路口的集合,不包括起點和終點。

假設比賽要分兩天進行。為了達到這個目的,原來的跑道必須分為兩個跑道,每天使用乙個跑道。第一天,起點為路口 0,終點為乙個「中間路口」;第二天,起點是那個中間路口,而終點為路口 n。對於給出的良好的跑道,你的程式要確定「中間路口」的集合。如果良好的跑道 c 可以被路口 s 分成兩部分,這兩部分都是良好的,並且 s 不同於起點也不同於終點,同時被分割的兩個部分滿足下列條件:(1)它們之間沒有共同的街道(2)s 為它們唯一的公共點,並且 s 作為其中乙個的終點和另外乙個的起點。那麼我們稱 s 為「中間路口 」。在例子中只有路口 3 是中間路口。

輸入輸出格式

輸入格式:

輸入檔案包括乙個良好的跑道,最多有 50 個路口,100 條單行道。

一共有 n+2 行,前面 n+1 行中第 i 行表示以編號為(i-1)的路口作為起點的街道,每個數字表示乙個終點。行末用 -2 作為結束。最後一行只有乙個數字 -1。

輸出格式:

第一行包括:跑道中「不可避免的」路口的數量,接著是這些路口的序號,序號按照公升序排列。

第二行包括:跑道中「中間路口」的數量,接著是這些路口的序號,序號按照公升序排列。

這個題反正理解很重要,題意大概是:

給乙個有向圖,共兩問:

1)求所有從0到n的必經之點

2)求所有消失後就會將整個圖分成不聯絡的兩塊的點(中間點)

很顯然,如果乙個點消失後就會將圖分成不聯絡的兩半,那麼這個點就一定是必經之點,於是第二問的答案就是第一問的子集了。我們就可以每找出乙個1),就判斷它是否滿足2)。

細節:在1)的搜尋之前,一定不可以手賤地添上:vis1[i]=1; 

而2)可添可不添。

c++#include 

#include

#include

#include

using

namespace

std;

//×??àód 50 ???·?ú£?100 ì?μ¥ddμà?£

struct

point

edge[

120];

int x,y,n=0,tot=0

,gg;

int head[55

];int must[55],mid[55],cnt1=0,cnt2=0

;int vis1[55],vis2[55

];void add(int u,int

v)bool dfs(int

x) }

if(vis1[n]) return1;

return0;

}void check(int

x) }

}int

main()

n++;

}for(int i=1;i)

if(!flag)}}

cout

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

cout

cout

<

cout

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

cout

return

0;

}

USACO4 3 3 街道賽跑 解題報告

問題描述 下圖表示一次街道賽跑的跑道。可以看出有一些路口 用 0 到 n 的整數標號 和連線這些路口的箭頭。路口 0 是跑道的起點,路口 n 是跑道的終點。箭頭表示單行街道。運動員們可以順著街道從乙個路口移動到另乙個路口 只能按照箭頭所指的方向 當運動員處於路口位置時,他可以選擇任意一條由這個路口引...

街道字元識別賽題理解

這算是我的第一篇的cv筆記,cv方面了解的不多,這次的街道字元識別算是乙個正式的入門吧,下面簡要介紹一下我對本次賽題的一些個人理解。賽題以街道字元為賽題資料,於svhn街道字元 the street view house numbers svhn dataset 訓練集資料報括3w張 驗證集資料報括...

牛客練習賽43

求出 frac 的 k 到 k 位小數 1 leq n,m,k k leq 10 0 leq k k leq 10 一開始想通過找迴圈節來做,然後發現迴圈節大於 10 時會超時。看別人ac 發現,其實可以放大m然後求出對n的餘數,也就是讓 m m times 10 1 mathbf n 之後繼續模擬...