時間限制:c/c++ 1秒,其他語言2秒
空間限制:c/c++ 32768k,其他語言65536k
64bit io format: %lld
q市發生了一起特大盜竊案。這起盜竊案是由多名盜竊犯聯合實施的,你要做的就是盡可能多的抓捕盜竊犯。
已知盜竊犯分布於
n'>nn個地點,以及第
i'>ii個地點初始有 ai
'>aiai名盜竊犯。
特別的是,對於每乙個地點
u'>uu,都有乙個固定的地點
v'>vv--當前如果某個盜竊犯位於地點
u'>uu,在下乙個時刻他會移動到地點
v'>vv。
你需要通過初始時在某些點設定哨卡來捉住他們。
現在你可以在
m'>mm個地點設定哨卡,如果在某個地點設定哨卡,你可以抓獲在任一時刻經過該地點的盜竊犯。
也就是說,哨卡存在的時間是無限長,但哨卡不能移動。
第一行兩個整數 n,m(1≤
n,m≤
105)'>n,m(1≤n,m≤105)n,m(1≤n,m≤105)。
第二行
n'>nn個整數 a1
a2..
.an'>a1a2...ana1a2...an (0
≤a1,
a2,.
..an
≤105)
'>(0≤a1,a2,...an≤105)(0≤a1,a2,...an≤105),表示第
i'>ii個地點初始有 ai
'>aiai名盜竊犯。
第三行
n'>nn個整數 v1
v2..
.vn'>v1v2...vnv1v2...vn (1
≤v1,
v2,.
..vn
≤n)'>(1≤v
抓捕盜竊犯(並查集)
題意 中文題面 題解 罪犯之間可能會形成乙個聯通塊,只要在每個聯通塊上設乙個關卡就能抓獲聯通塊上所有罪犯。並查集求出所有聯通塊,然後對罪犯個數排個序就行了。includeusing namespace std typedef long long ll const int n 1e5 10 int a...
誰是盜竊犯
有乙個法院 審理一起盜竊案件,某地的a b c三人被押上法庭。負責審理這個案件的法官是這樣想的 願意提供真實情況的不可能是盜竊犯 與此相反,真正的盜竊犯為了掩蓋罪行,是一定會編造口供的。因此,他得出了這樣的結論 說真話的肯定不是盜竊犯,說假話的肯定就是盜竊犯。審批的結果也證明了法官這個想法是正確的。...
牛客練習賽41 C 抓捕盜竊犯(並查集)
題解 這個題中逃犯是可以連續移動的,而不是移動到乙個位置後停止,所以用並查集find函式將每個點的最開始的那個點作為父親,然後求屬於此節點的總和,最後排序找出前m大。include include include include using namespace std int n,m,x int p...