HDU - 6268: Master of Subgraph (分治+bitset优化背包)
题意:T组样例,给次给出一个N节点的点权树,以及M,问连通块的点权和sum的情况,输出sum=1到M,用0或者1表示。
思路:背包,N^2,由于是无向的连通块,所以可以用分治优化到NlgN。 然后背包可以用bitset优化。注意不要想着背包合并背包,背包只能合并单点。
#include<bits/stdc++.h>
#define pb push_back
#define rep(i,a,b) for(int i=a;i<=b;i++)
#define Gv G[u][i]
#define feach(i,u) for(int i=0;i<G[u].size();i++)
using namespace std;
const int maxn=;
vector<int>G[maxn];
bitset<>s[maxn],ans;
int a[maxn],sz[maxn],son[maxn],vis[maxn],rt;
void dfs(int u,int f,int n){
sz[u]=; son[u]=;
feach(i,u){
if(Gv==f||vis[Gv]) continue;
dfs(Gv,u,n);
sz[u]+=sz[Gv];
son[u]=max(son[u],sz[Gv]);
}
son[u]=max(son[u],n-son[u]);
if(son[u]<son[rt]) rt=u;
}
void getdp(int u,int f){
sz[u]=; s[u]<<=a[u];
feach(i,u){
if(Gv==f||vis[Gv]) continue;
s[Gv]=s[u];
getdp(Gv,u);
sz[u]+=sz[Gv];
s[u]|=s[Gv];
}
}
void solve(int u){
vis[u]=; s[u].reset();s[u][]=;
getdp(u,-); ans|=s[u];
feach(i,u){
if(!vis[Gv]){
rt=; dfs(Gv,-,sz[Gv]);
solve(rt);
}
}
}
int main()
{
int T,N,M;
scanf("%d",&T); son[]=;
while(T--){
scanf("%d%d",&N,&M);
rep(i,,N) G[i].clear(),vis[i]=;
ans.reset();
rep(i,,N-){
int u,v; scanf("%d%d",&u,&v);
G[u].pb(v); G[v].pb(u);
}
rep(i,,N) scanf("%d",&a[i]);
rt=; dfs(,-,N);
solve(rt);
rep(i,,M) printf("%d",(int)ans[i]);
puts("");
}
return ;
}
HDU - 6268: Master of Subgraph (分治+bitset优化背包)的更多相关文章
- hdu 6268 Master of Subgraph(点分治+bitset)
You are given a tree with n nodes. The weight of the i-th node is wi. Given a positive integer m, no ...
- HDU 6268 Master of Subgraph (2017 CCPC 杭州 E题,树分治 + 树上背包)
题目链接 2017 CCPC Hangzhou Problem E 题意 给定一棵树,每个点有一个权值,现在我们可以选一些连通的点,并且把这点选出来的点的权值相加,得到一个和. 求$[1, m] ...
- CCPC 2016 杭州 E. Master of Subgraph(点分治+bitset优化DP)
题目链接:http://acm.hdu.edu.cn/downloads/CCPC2018-Hangzhou-ProblemSet.pdf 题意:给定一棵有 n 个结点的树和一个数 m,对于 i ∈ ...
- HDU5890:Eighty seven(Bitset优化背包)
Mr. Fib is a mathematics teacher of a primary school. In the next lesson, he is planning to teach ch ...
- 洛谷 P5527 - [Ynoi2012] NOIP2016 人生巅峰(抽屉原理+bitset 优化背包)
洛谷题面传送门 一道挺有意思的题,想到了某一步就很简单,想不到就很毒瘤( 首先看到这样的设问我们显然可以想到背包,具体来说题目等价于对于每个满足 \(i\in[l,r]\) 的 \(a_i\) 赋上一 ...
- 算法学习分析-点分治 HDU 6269 Master of Subgraph
首先给出定义 点分治是一种处理树上路径的工具 挂出一道题目来:Master of Subgraph 这道题目让你求所有联通子图加和所能产生数字,问你1到m之间,那些数字可以被产生 这道题目,假如我们利 ...
- HDU 5808 Price List Strike Back bitset优化的背包。。水过去了
http://acm.hdu.edu.cn/showproblem.php?pid=5808 用bitset<120>dp,表示dp[0] = true,表示0出现过,dp[100] = ...
- hdu 5506 GT and set dfs+bitset优化
GT and set Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Probl ...
- HDU 5313 bitset优化背包
题目大意: 添加尽可能少的边,最后使图形成二分图 一开始将图区分成一个个联通分量,根据二分图染色,计算出每个联通分量的黑色点和白色点的个数 希望添加的边最少,那么合并的时候,希望黑白块尽可能平均,这无 ...
随机推荐
- Spring Web MVC 随笔
1.ContextLoaderListener 对于使用Spring的Web应用,无需手动创建Spring容器,而是通过配置文件声明式地创建Spring容器.可以直接在web.xml文件中配置创建Sp ...
- 20145201《Java程序设计》第1次实验报告
实验内容 一.命令行下java程序开发 1.建立Code目录,输入mkdir 20145201命令建立实验目录,并使用dir命令查看目录建立情况. 运行结果如图 2.进入实验目录,输入mkdir ex ...
- NOIP 合唱队形
描述 N位同学站成一排,音乐老师要请其中的(N-K)位同学出列,使得剩下的K位同学排成合唱队形. 合唱队形是指这样的一种队形:设K位同学从左到右依次编号为1,2…,K,他们的身高分别为T1,T2,…, ...
- SpringBoot 悲观锁 与 乐观锁
乐观所和悲观锁策略 悲观锁:在读取数据时锁住那几行,其他对这几行的更新需要等到悲观锁结束时才能继续 . 乐观所:读取数据时不锁,更新时检查是否数据已经被更新过,如果是则取消当前更新,一般在悲观锁的等待 ...
- JavaEE之Junit单元测试
1编写测试类,简单理解Junit可以部分用于取代java的main方法 2在测试类方法上添加注解 @Test 3 @Test修饰的方法要求:public void 方法名() {…} ,方法名自定义建 ...
- KMP(转自matrix67)
蒟蒻笔者自己发现matrix67大佬讲的十分明白,然后现在网络上的排版也是有些微的问题,就稍稍改了一下,然后把代码改成了c++的. 如果机房马上要关门了,或者你急着要和MM约会,请直接跳到第六个自然段 ...
- 关于eclipse中看不到源码的问题
这几步之后会生成一个src压缩包,再用att打开即可.记住 要按ctrl再点击
- JNI_Z_02_函数参数_JNIEnv*_jclass_jobject
1. 1.1.JNIEXPORT void JNICALL Java_包名_类名_函数名01(JNIEnv * env, jclass clazz) // Java代码中的 静态函数 1.2.JNIE ...
- javascript异步编程的几种方法
目前工作中用的比较多的异步模式编程有如下几种方法 一 回调函数 这是异步编程最基本的方法,假设有两个函数f1和f2,后者等待前者的执行结果 f1(); f2(); 如果f1是一个很耗时的任务,可以考虑 ...
- 智课雅思词汇---二十四、形容词后缀-al-ial-ar-ary-ic-id-ish-ile-ine-oid-ory
智课雅思词汇---二十四.形容词后缀-al-ial-ar-ary-ic-id-ish-ile-ine-oid-ory 一.总结 一句话总结: 1.形容词后缀-al? autumnal 英 [ɔː'tʌ ...