題目分析:
答案肯定是鏈,否則可以把枝幹放到主幹。
去除一直存在的位,這樣0位佔滿時就會結束。
用$f[s]$表示0位填埋情況,每次轉移是它的乙個子集,我們考慮可否轉移。
再用$g[s]$儲存轉移是否合法,用滑稽果填充$g$陣列。不一定要完全滿足條件,因為有其它方案更優,無影響。
**:
1 #include2using
namespace
std;34
#define ri register56
const
int maxn = 202000;7
8int n,a[maxn],bit=1
,maxx;
9long
long ans = 0;10
int cnt = (1
<<18)-1,res=0;11
12int f[1
<<18
];13
int g[1
<<18],vol[1
<<18
];14
char buffer[20000000], *buf=buffer;
15 inline void
in(int &x)
1920 inline void
read()
2627 inline void
init()33}
34}3536 inline void
work();43}
44}45 ans += f[bit-1
];46 printf("
%lld
",ans);47}
4849
intmain()
UOJ 370 UR 17 滑稽樹上滑稽果
n leq 1e5 個點,每個點有個權值 a i leq 2e5 現將點連成樹,每個點 i 的鏈結代價為 a i and i父親的代價 這裡的 and 是二進位制按位與,求最小總代價。日常被坑。首先肯定是要把這些點連成一條鏈,盡量使得代價andand就and成0了。然後呢。方法一 貪心,從小到大排。...
370 區間加法
題目描述 假設你有乙個長度為 n 的陣列,初始情況下所有的數字均為 0,你將會被給出 k 個更新的操作。其中,每個操作會被表示為乙個三元組 startindex,endindex,inc 你需要將子陣列 a startindex endindex 包括 startindex 和 endindex 增...
UOJ 308 UNR 2 UOJ拯救計畫
uoj 如果模數很奇怪,我們可以插值一下,設 f i 表示用了 i 種顏色的方案數。然而模 6 這個東西很有意思,6 2 3 所以我們只需要考慮其模 2 和模 3 的結果了。而最終答案的貢獻是 sum k a i f i 當 i ge 3 的時候 6 a k i 所以我們只需要知道 f 0 f 1 ...