抓捕盜竊犯(並查集)

2021-09-26 19:53:27 字數 476 閱讀 6184

題意:中文題面

題解:罪犯之間可能會形成乙個聯通塊,只要在每個聯通塊上設乙個關卡就能抓獲聯通塊上所有罪犯。並查集求出所有聯通塊,然後對罪犯個數排個序就行了。

#includeusing namespace std;

typedef long long ll;

const int n = 1e5+10;

int a[n],pre[n];

ll sz[n];

void find(int& x)

bool cmp(ll x,ll y)

int main()

for(int i=1;i<=n;i++)

sort(sz+1,sz+1+n,cmp);

ll ans=0;

for(int i=1;i<=m;i++) ans+=sz[i];

printf("%lld\n",ans);

}

抓捕盜竊犯

時間限制 c c 1秒,其他語言2秒 空間限制 c c 32768k,其他語言65536k 64bit io format lld q市發生了一起特大盜竊案。這起盜竊案是由多名盜竊犯聯合實施的,你要做的就是盡可能多的抓捕盜竊犯。已知盜竊犯分布於 n nn個地點,以及第 i ii個地點初始有 ai a...

牛客練習賽41 C 抓捕盜竊犯(並查集)

題解 這個題中逃犯是可以連續移動的,而不是移動到乙個位置後停止,所以用並查集find函式將每個點的最開始的那個點作為父親,然後求屬於此節點的總和,最後排序找出前m大。include include include include using namespace std int n,m,x int p...

並查集 牛客練習賽41 C抓捕盜竊犯

題目鏈結 題意,初始每乙個城市都有一夥盜賊,沒過乙個時刻盜賊就會逃竄到另乙個城市,你可以在m個城市設定監察站,會逮捕所有經過該城市的盜賊 分析 仔細分細題目,因為每個城市的盜賊都是流動的,這就可能會形成環,而如果成環的話,在環所在任一城市都可以把這批城市的全部盜賊逮捕,就不需要再環上設多個監察站了,...