[COCI2017-2018#5] Pictionary(并查集+dfs)
賊ex的一道,卡了本仙女整整7個小時orz
思路容易理解,but碼力very重要orz
我愿意花五毛錢提升我的碼力,換個腦子也行,不換臉這張臉生得俊俏
luogu傳送door
題目
在宇宙一個不為人知的地方,有一個星球,上面有一個國家,只有數(shù)學家居住。 在這個國家有n個數(shù)學家,有趣的是,每個數(shù)學家都住在自己的城市,且城市間無道路相連,因為他們可以在線交流。當然,城市有從1到n的編號。
一位數(shù)學家決定用手機發(fā)論文,而手機將“不言而喻”自動更正成了“猜謎游戲”。 不久之后,這個國家就發(fā)現(xiàn)了猜謎游戲。他們想要見面一起玩,于是這個國家就開始了修路工程。 道路修建會持續(xù)m天。對于第i天,若gcd(a,b)=m?i+1,則a和b城市間會修一條路。
由于數(shù)學家們忙于建筑工作,請你來確定一對數(shù)學家最早什么時候能湊到一起玩。
輸入輸出格式
輸入格式
第一行有三個正整數(shù)n,m,q,表示城市數(shù)量、修路持續(xù)天數(shù)、詢問數(shù)量。 接下來q行,每行有兩個正整數(shù)a,b,表示詢問a和b兩個城市的數(shù)學家最早什么時候能在一起玩。
輸出格式
輸出q行,第i行有一個正整數(shù),表示第i次詢問的結(jié)果
說明
數(shù)據(jù)范圍:
對于40%的數(shù)據(jù):n≤4000,q≤10 ^5
對于全部數(shù)據(jù):
1≤n,q≤10^5
1≤m≤n1≤m≤n
樣例1解釋: 在第一天,(3,6)(3,6)之間修了一條路,因此第二次詢問輸出1
在第二天,(2,4),(2,6),(2,8),(4,6),(6,8)(2,4),(2,6),(2,8),(4,6),(6,8)之間都修了一條路,此時44和88號城市連通,第三次詢問輸出2
在第三天,所有編號互質(zhì)的城市之間都修了路,2和5號城市在此時連通,第一次詢問輸出1
樣例2解釋: 在第二天,(20,15)之間修了一條路
第四天,(15,9)之間修了一條路
所以20和9號城市在第四天連通,輸出4
題解
我看了luogu題解,發(fā)現(xiàn)根本沒有人跟寶寶是一個做法,當時,我的媽呀!
俺內(nèi)心慌得一批,但是我在這條不歸路上繼續(xù)走了下去,誤入歧途啊
七個小時終于把這個江山打下來了
肯定很好想,問這兩個城市有沒有相通,肯定是我們的并查集大哥,這個不用多說!
而且1與任何數(shù)都互質(zhì),那么在最后一天施完工后肯定所有城市都是互通的,
這就是一棵赤裸裸的樹
我們真正要解決的就是這兩個城市在第幾天成為了一個集合
帥氣的我的實現(xiàn)是先預(yù)處理每一天,哪些城市會進行施工相通,邊處理,邊并查集,這樣的話就不用把所有的邊全部得到后再sort再并查集。
因為從m到1循環(huán)的話,i,j之間沒路時,這天就是最早的 ,
PS:并查集的unionSet一定要用優(yōu)化的啟發(fā)式,不然就等著TLE回家找媽媽吧!
反正我是把長城都哭淹了!我們在進行unionSet時順便建個有向邊,
一定是爸爸之間建邊,又哭了orz
接著就是dfs,不一定是從1開始,可以用循環(huán)找根節(jié)點f[i]==i,哭了哭了。
dfs處理每一個點的深度,而且可以保證每個點的入度不會大于1,在處理深度的同時,把u,v兩點第幾天相同的也記錄下來,用vector可以辦到
最后就是爬樹,妙啊!妙啊!暴力lca都行的老鐵,
因為每個點都只有一個爸爸 (誒)
所以這棵樹也是唯一的,路徑唯一的,
我們就在線操作,x,y用一個Max記錄x和y在往上爬的時候路徑的最大值
以上聽起來是不是很簡單啊woo~
代碼實現(xiàn)
瞅瞅吧!七個小時的改了n遍,長得慘不忍睹啊!這濃縮的都是精華啊!
還有rank標記數(shù)組,rank是關(guān)鍵字,又哭了哭了orz,淚腺炸了
把這道題A(≧▽≦)/啦啦啦
好了,像打了雞血吃興奮劑一樣,有任何代碼,思路不懂得歡迎留言,歡迎歡迎熱烈歡迎,我們不賣假,誠信營業(yè),做出世界前五百強!byebye~不要太想帥氣又多金的我!
總結(jié)
以上是生活随笔為你收集整理的[COCI2017-2018#5] Pictionary(并查集+dfs)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 伤心的个性签名
- 下一篇: 倒海翻江跃巨蛟是指什么生肖