牛客网【每日一题】7月8日 Alliances
來源:牛客網(wǎng)
文章目錄
- 題目描述
- 題解:
- 代碼:
題目描述
樹國是一個有n個城市的國家,城市編號為1~n。連接這些城市的道路網(wǎng)絡(luò)形如一棵樹,
即任意兩個城市之間有恰好一條路徑。城市中有k個幫派,編號為1~k。每個幫派會占據(jù)一些城市,以進(jìn)行非法交易。有時幫派之間會結(jié)盟,這就使得城市更加不安全了。同一座城市中可能有多個幫派。
當(dāng)一些幫派結(jié)成聯(lián)盟時,他們會更加強(qiáng)大,同時也更加危險。他們所控制的城市數(shù)會顯著增加。具體地,一個聯(lián)盟控制的城市是聯(lián)盟中所有幫派所占據(jù)的城市,再加上這些城市兩兩之間路徑上的所有城市。
shy是樹國的市長,他想要選擇一個城市作為首都。在決定之前,他要先做一些調(diào)研。為此,他找來你幫他回答一些詢問,你能做到嗎?在每個詢問中,shy會選擇一個城市作為首都,同時會告訴你當(dāng)前活躍的幫派的集合。在這個詢問中,你只需要考慮給定的集合中的幫派,其他的幫派你可以當(dāng)作不存在。已知給定集合中的這些幫派結(jié)成了聯(lián)盟,shy希望抓獲聯(lián)盟中的人,以得到關(guān)于整個聯(lián)盟的一些信息。為此,他要找到被聯(lián)盟控制的所有城市中離首都最近的一座城市到首都的距離。有可能首都本身就被控制了,此時答案為0。請注意,詢問之間相互獨立,互不影響。
輸入描述:
輸入的第一行包含一個整數(shù)n,代表樹國中的城市數(shù)。 接下來n?1行,每行包含兩個整數(shù)u和v,代表城市u和v之間存在一條道路。
接下來一行包含一個整數(shù)k,代表樹國中的幫派數(shù)。
接下來k行,每行描述一個幫派。第i行的第一個整數(shù)c[i]代表第i個幫派占據(jù)的城市數(shù),接下來c[i]個整數(shù),代表被第i個幫派占據(jù)的城市。
接下來一行包含一個整數(shù)Q,代表詢問數(shù)。
接下來Q行,每行描述一個詢問。每行的前兩個整數(shù)V和t[i]代表本次詢問中的首都與需要考慮的幫派集合的大小。接下來t[i]個整數(shù)代表本次詢問中需要考慮的幫派。.
輸出描述:
對于每個詢問,輸出一行,包含一個整數(shù),代表詢問的答案。
示例1
輸入
輸出
2 1 1備注:
對于30%的數(shù)據(jù),1≤n,k,Q≤1000, 1≤每個幫派占據(jù)城市數(shù)之和≤1000, 1≤每個詢問中考慮的幫派數(shù)之和≤1000
對于60%的數(shù)據(jù),1≤n,k,Q≤100000, 1≤每個幫派占據(jù)城市數(shù)之和≤100000, 1≤每個詢問中考慮的幫派數(shù)之和≤100000
對于100%的數(shù)據(jù),1≤n,k,Q≤500000, 1≤每個幫派占據(jù)城市數(shù)之和≤500000, 1≤每個詢問中考慮的幫派數(shù)之和≤500000
題解:
第一反應(yīng)lca,最近好多l(xiāng)ca的題
題目本質(zhì)就是求一個點(即題目中的首都)到lca(x,y)上的點(即被控制的城市)的最短路徑
被控制的城市其實就形成了一個子樹
分情況討論:
1.城市不在被控制的子樹里面(如圖)
紫色是城市,橙色是被控制子樹,那距離就是首都到子樹的距離
sum=dep[首都]+dep[lca(城市x)]-dep[lca(城市x,首都)]
城市x就是lca(x,y)的值(x和y就是題目所給的幫派)
2.首都被控制
首都被控制分為直接控制(幫派點為首都)
或間接控制(首都在幫派之間的線路上)
那距離就是0
3.首都沒被控制,但是首都在被控制的子樹中
(首都的前驅(qū)被控制,后繼沒被控制)
對于這種情況我們就要找首都的的前驅(qū)后繼點,這樣好判斷距離
可以用dfs序,因為dfs序就保存著各個點的順序
然后可以用二分來降低復(fù)雜度
如果首都到LCA的路徑上存在一個點x(x被占領(lǐng)),x!=lca,那么答案就是首都到最近一個符合這個條件的點
lca詳細(xì)講解
dfs序詳細(xì)講解
為什么這些知識點我都會,但是我就不會做題。。哭o(╥﹏╥)o
代碼:
寫完再加上。。。(最近有點懶)
好吧我放棄了,寫完一直改,一直wa,難受自閉了
借鑒的大佬的代碼
總結(jié)
以上是生活随笔為你收集整理的牛客网【每日一题】7月8日 Alliances的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: QMV是什么格式
- 下一篇: 【每日一题】7月9日题目 Color