洛谷 選學霸 並查集 揹包

2021-09-29 08:41:44 字數 876 閱讀 6260

題解:本題主要考查並查集+揹包變形

簡要題意:從n

nn名學生中選m

mm人當學霸,但有k

kk對人實力相當。如果實力相當的人中,一部分被選上,另一部分沒有,同學們就會**,求選出多少學霸合理,又與原來的m

mm盡可能接近。

1.並查集+揹包:巧妙的一題揹包,有k

kk對人實力相當,那麼我們把實力相當的人合併在一起,用並查集並且記錄集合中有多少人。

可是題目求最接近m

mm的值,如何用揹包。我們可以將乙個物體的重量當作它的價值(把實力相當的人數作為價值),將題目轉變為乙個基本的01揹包問題(類似裝箱問題)。注意求的最接近m

mm的值,體積是可以超過m

mm的,所以把體積擴大。

**如下:

#include#include#include#includeusing namespace std;

int dp[666666],f[666666],sum[666666];

int v[666666],n;

int n,m,k,ans,minn=0x3f3f3f3f,answer;

int find(int k)

int main()

for(int i=1;i<=k;i++) }

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

if(f[i]==i)

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

for(int j=2*m;j>=v[i];j--)

dp[j]=max(dp[j],dp[j-v[i]]+v[i]);

for(int i=1;i<=m*2;i++) }

cout

}

洛谷P2170 選學霸 並查集,揹包

題目描述 老師想從n名學生中選m人當學霸,但有k對人實力相當,如果實力相當的人中,一部分被選上,另一部分沒有,同學們就會 所以老師想請你幫他求出他該選多少學霸,才能既不讓同學們 又與原來的m盡可能接近 輸入輸出格式 輸入格式 第一行,三個正整數n,m,k。第2 k行,每行2個數,表示一對實力相當的人...

洛谷 P2170 選學霸

傳送門 在n nn個人中,有k kk對關係,要求選出m mm位學霸,且要保證所有關係相通的人都會一齊被選上 求滿足上述條件的情況下,最接近m mm的方案是選多少位學霸 因為題目要求我們將所有關係相通的人繫結在一起,所以我們考慮用並查集實現連通塊的判定 這就實現了將關係省去,在所有連通塊中選,我們可以...

並查集(模板) 洛谷3367

題目描述 如題,現在有乙個並查集,你需要完成合併和查詢操作。輸入輸出格式 輸入格式 第一行包含兩個整數n m,表示共有n個元素和m個操作。接下來m行,每行包含三個整數zi xi yi 當zi 1時,將xi與yi所在的集合合併 當zi 2時,輸出xi與yi是否在同一集合內,是的話輸出y 否則話輸出n ...