#include <bits/stdc++.h>
using namespace std;
typedef unsigned long long ull;
ull n, k, a[22], ans;//用unsigned long long记录最大 2^k 的数据, (其实long long也可以)
inline void dfs(ull dep, ull now) {
if(dep > n) {//取了n个人以后
ans = max(ans, now);
return;
}
dfs(dep + 1, now ^ a[dep]);//选这个人,抑或上他的分值
dfs(dep + 1, now);//不选
}
int main() {
cin >> n >> k;
for(ull i = 1, c; i <= n; i++) {
cin >> c;
for(ull j = 1, x; j <= c; j++) {
cin >> x;
a[i] |= (1ull << (k - x)); //记录二进制分值,等价于a[i] += (1ull << (k - x))或a[i] += (1ull * pow(2, k - x))
}
}
dfs(0, 0);
cout << ans;
return 0;
}
B3618 寻找团伙
最新推荐文章于 2024-10-16 19:08:56 发布