抓捕盜竊犯

2022-05-06 15:36:09 字數 928 閱讀 4014

時間限制: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...