Posted on 2010-03-03 15:00
王之昊 閱讀(236)
評(píng)論(0) 編輯 收藏 引用 所屬分類(lèi):
pku
題目大意是 alice 從 s 點(diǎn)做火車(chē)到 t點(diǎn),但是想逃票, 路線是由若干條線路組成的,若兩條線路相交,那么可以轉(zhuǎn)車(chē),路線上可能有警察,如果警察在交點(diǎn)上,那么你轉(zhuǎn)車(chē)他就會(huì)檢查你的票,不轉(zhuǎn)車(chē)他就不會(huì)管你 ; 如果警察在線路的其他位置,那么只要你碰到他,他就會(huì)檢查你。有最多100條線路,3000個(gè)警察。問(wèn) alice 是否能逃票成功。
關(guān)鍵是建圖。 把線路離散化,然后以子線段作為結(jié)點(diǎn)。如果直接把警察作為分割點(diǎn)的話,最后的子線段可能很多。在交點(diǎn)處的警察不應(yīng)該作為分割點(diǎn),他們只是表示這兩條線路不可轉(zhuǎn)車(chē)。剩余的在線路上的警察是分割點(diǎn)。
先考慮一條線路,用分割點(diǎn)把它隔開(kāi)。首先可以明確這些子線段不直接相連??紤]兩條線路間的關(guān)系。如果這兩條線路的交點(diǎn)上有警察,我們可以認(rèn)為這兩條線路直接不相連。
具體實(shí)現(xiàn)的第一步是確定哪些是分割點(diǎn), 哪些不是??梢愿鶕?jù) 對(duì)于每個(gè)警察,他在幾條線路上 判斷。如果他在0條線路上。不是分割點(diǎn)。如果他在1條線路上,是分割點(diǎn)。如果他在多條線路上,我認(rèn)為這些線路間不具備直接相連性。
然后把分割點(diǎn)分到每條線路上去,去把每條線路分割成子線段。并且標(biāo)明這些子線段不具有直接相連性。
然后考慮那些雖然相交,但是我們認(rèn)為他們不直接相連的線路,把它們的子線段標(biāo)記成不直接相連。
最后這些子線段的數(shù)量小于 n + m。算出剩余的兩兩子線段的關(guān)系。最后求一下連通塊即可。