裸的状压dp。

设f[i][j]表示在i字数内放j集合的分部,直接sb转移。

// luogu-judger-enable-o2
#include<bits/stdc++.h>
#define il inline
#define vd void
typedef long long ll;
il int gi(){
int x=0,f=1;
char ch=getchar();
while(!isdigit(ch)){
if(ch=='-')f=-1;
ch=getchar();
}
while(isdigit(ch))x=x*10+ch-'0',ch=getchar();
return x*f;
}
int n,p,fir[101],dis[201],nxt[201],id;
il vd link(int a,int b){nxt[++id]=fir[a],fir[a]=id,dis[id]=b;}
int W[101][13],WW[101][1<<12],s[1<<12],S[1<<12],lg[1<<12];
int f[101][1<<12],F[1<<12],G[1<<12],U;
il vd dfs(int x,int fa=-1){
for(int i=fir[x];i;i=nxt[i])if(fa!=dis[i])dfs(dis[i],x);
memset(F,-63,sizeof F);F[0]=0;
// F[o] 表示 放集合为o的部门的最大收益
for(int i=fir[x];i;i=nxt[i])
if(fa!=dis[i]){
memcpy(G,F,sizeof F);
for(int j=U;;j=(j-1)&U){
for(int k=j;;k=(k-1)&j){
F[j]=std::max(F[j],G[k]+f[dis[i]][j^k]);
if(!k)break;
}
if(!j)break;
}
}
for(int i=U;;i=(i-1)&U){
for(int j=i;;j=(j-1)&i){
f[x][i]=std::max(f[x][i],S[i]+F[j]-WW[x][i^j]);
if(!j)break;
}
if(!i)break;
}
}
int main(){
#ifndef ONLINE_JUDGE
freopen("2465.in","r",stdin);
freopen("2465.out","w",stdout);
#endif
memset(f,-63,sizeof f);
n=gi(),p=gi();int u,v,w;
U=(1<<p)-1;
for(int i=1;i<n;++i)u=gi(),v=gi(),link(u,v),link(v,u);
for(int i=0;i<p;++i)lg[1<<i]=i;
for(int i=1;i<=n;++i){
for(int j=1;j<=p;++j)W[i][j]=gi();
for(int j=1;j<1<<p;++j)WW[i][j]=WW[i][j-(j&-j)]+W[i][lg[j&-j]+1];
}
int T=gi();
while(T--){
u=gi(),v=gi(),w=0;
while(v--)w|=1<<gi()-1;
s[w]+=u;
}
for(int i=0;i<1<<p;++i)
for(int j=i;;j=(j-1)&i){
S[i]+=s[j];
if(!j)break;
}
dfs(1);
printf("%d\n",f[1][U]);
return 0;
}

洛咕 P2465 [SDOI2008]山贼集团的更多相关文章

  1. P2465 [SDOI2008]山贼集团 dp

    这个题是一道树形dp+状压dp二合一,先预处理每种组合会有什么额外的费用,然后在树上dp就行了. 题干: 题目描述 某山贼集团在绿荫村拥有强大的势力,整个绿荫村由N个连通的小村落组成,并且保证对于每两 ...

  2. 洛咕 P2155 [SDOI2008]沙拉公主的困惑

    洛咕 P2155 [SDOI2008]沙拉公主的困惑 有个结论,就是如果\(gcd(a,b)=1\),那么\(gcd(a+kb,b)=1\).证明比较显然. 所以这个题目要问的\(n!\)就可以分成\ ...

  3. [SDOI2008]山贼集团

    题目描述 某山贼集团在绿荫村拥有强大的势力,整个绿荫村由\(N\)个连通的小村落组成,并且保证对于每两个小村落有且仅有一条简单路径相连. 小村落用阿拉伯数字编号为\(1,2,3,4, \dots ,n ...

  4. 【学术篇】SDOI2008 山贼集团

    今天一月一号.. 突然想安利一波我的中二的2017总结... 传送门1:codevs 传送门2:luogu 时限5s和1s的区别(你没看我传送门都给的大牛分站了) 现在不仅线筛.. 有负数的快读都打不 ...

  5. 洛咕 P2463 [SDOI2008]Sandy的卡片

    哈希水过. 首先这是一段delta相同的序列,按照套路差分一下,b[i]=a[i]-a[i-1],然后就是这些序列的最长公共子段 由于数据范围很小,就可以二分,枚举第一个序列的子段然后每个子序列暴力c ...

  6. 【[SDOI2008]山贼集团】

    非常好的一道题 树上的状压\(dp\) 根据数据范围我们就能知道这是一道需要状压的题目 所以状态就是\(dp[i][S]\)表示在以\(i\)为根的子树里,选择的状态为\(S\)的最大收益 这个收益只 ...

  7. 洛咕3312 [SDOI2014]数表

    洛咕3312 [SDOI2014]数表 终于独立写出一道题了...真tm开心(还是先写完题解在写的) 先无视a的限制,设\(f[i]\)表示i的约数之和 不妨设\(n<m\) \(Ans=\su ...

  8. 洛咕 P3700 [CQOI2017]小Q的表格

    洛咕 P3700 [CQOI2017]小Q的表格 神仙题orz 首先推一下给的两个式子中的第二个 \(b\cdot F(a,a+b)=(a+b)\cdot F(a,b)\) 先简单的想,\(F(a,a ...

  9. 洛咕 P2336 [SCOI2012]喵星球上的点名

    洛咕 P2336 [SCOI2012]喵星球上的点名 先求出SA和height,一个点名串对应的就是一段区间,还有很多个点,就转化成了 有很多个区间,很多个点集,对每个区间计算和多少个点集有交,对每个 ...

随机推荐

  1. 精简计算UITableView文本高度

    精简计算UITableView文本高度 本人视频教程系类   iOS中CALayer的使用 最终效果: 核心源码(计算文本高度的类) NSString+StringHeight.h 与 NSStrin ...

  2. Linux alias命令详解

    alias:内置命令(没有路径),设置命令的别名,保护系统,方便 unalias:别名取消 常用的命令展示 临时设置 alias cp='cp –i' unalias cp      取消系统的别命令 ...

  3. AppHangB1:explorer进程停止与Windows交互

    现象:Windows 7,打开 “计算机” 的时候,资源管理器卡死,如图所示. 解决方法:卸载 CAD迷你看图软件,利用 CCleaner 清除注册表.

  4. 实践和感悟 - scala向下转型和减少穷举

    工作中的问题总结: 问题一:scala 之向下转型 引言:假如在复杂的业务逻辑中,变量的类型不能确认,只能给个接口类型,这样数据类型推导不会错误,但是后面要使用实现类的类型时,你却发现转不过来了? 对 ...

  5. 【Alpha】Daily Scrum Meeting——blog2

    团队成员 吴吉键 201421122007(组长) 魏修祺 201421122008 孙劲林 201421122022 1. 会议当天照片 忘记拍了!(没有拍照片的习惯,没有第四人拍照) 2. 每个人 ...

  6. Maven实战(十一)eclipse下载依赖jar包出问题

    问题描述 在pom.xml中配置了依赖,但是提示依赖不成功,或在本地仓库找不到相关依赖 大致错误如下: ArtifactDescriptorException: Failed to read arti ...

  7. Linux 上安装MyEclipse

    操作系统ubuntu14.04,亲测安装MyEclipse2014成功,且破解成阿功.在安装myeclipse之前,您当然需要安装jdk了,jdk在这里不做介绍 下载 下载linux版本的MyEcli ...

  8. ubuntu常见问题排查

    1. ubuntu recovery mode read-only 获取写的权限 1.1. 选择fsck check all file systems 进去直接选择YES就可以了 1.2. 选择roo ...

  9. vue中兄弟之间组件通信

    我们知道Vue中组件之间的通信有很多方式,父子之间通信比较简单,当我们使用vuex时候,兄弟组件之间的通信也很好得到解决 当我们项目较小时候,不使用vuex时候Vue中兄弟组件之间的通信是怎样进行的呢 ...

  10. HashMap实现原理及源码分析之JDK7

    攻克集合第一关!! 转载 http://www.cnblogs.com/chengxiao/ 哈希表(hash table)也叫散列表,是一种非常重要的数据结构,应用场景及其丰富,许多缓存技术(比如m ...