51NOD 1821 最優集合 並查集

2021-09-07 09:39:58 字數 1072 閱讀 4411

傳送門

題意:乙個集合s的優美值定義為:最大的x,滿足對於任意i∈[1,x],都存在乙個s的子集s',使得s'中元素之和為i。

給定n個集合,對於每一次詢問,指定乙個集合s1和乙個集合s2,以及乙個數k,要求選擇乙個s2的子集s3(|s3|<=k),使得s1∪s3的優美值最大。(集合元素可以重複)

$n,m \le 1000, q \le 1000$

比賽時看了一眼題沒認真想其實不難....現在想出來(也晚了)

考慮如何求最優值

如果現在最優值為$now$,只要找到下乙個未用的$\le now+1$的最小元素$x$,最優值就可以變成$now+x$

如果找不到怎麼辦?去$s2$裡找$\le now+1$的未用的最大元素

實現上可以用乙個並查集記錄某乙個元素的上乙個(包括自己)未用元素是誰做到$\alpha(m)$

#include #include 

#include

#include

#include

using

namespace

std;

typedef

long

long

ll;const

int n=1005

;inline

intread()

while(c>='

0'&&c<='9')

return x*f;

}int

n,a,b,k;

struct

set

void sort()

}s[n];

intfa[n];

inline

int find(int x)

void solve(set &a,set &b,int

k) }

else

break

; }

printf(

"%d\n

",now);

}int

main()

int q=read();

while(q--)

}

最優集合 51Nod 1821

假設已選元素之和是sum 下乙個待選的數是val 只有當val sum 1時 才滿足選擇當前元素之後 1,sum val 內任意數都可以被已選元素表示 如果val sum 1 則 sum 1,val 1 都無法用已選元素表示 鬼谷子錢袋問題為什麼可以用二進位制 就是因為二進位制是滿足上述條件的所有方...

51NOD 1821 最優集合 棧

1821 最優集合 乙個集合s的優美值定義為 最大的x,滿足對於任意i 1,x 都存在乙個s的子集s 使得s 中元素之和為i。給定n個集合,對於每一次詢問,指定乙個集合s1和乙個集合s2,以及乙個數k,要求選擇乙個s2的子集s3 s3 k 使得s1 s3的優美值最大。集合元素可以重複 input 第...

51nod 最小集合

最小集合 system message 命題人 基準時間限制 1 秒 空間限制 131072 kb 分值 80 a君有乙個集合。這個集合有個神奇的性質。若x,y屬於該集合,那麼x與y的最大公因數也屬於該集合。但是他忘了這個集合中原先有哪些數字。不過幸運的是,他記起了其中n個數字。當然,或許會因為過度...