吐槽:这道题真心坑...做了一整天,我太蒻了... 题意 构造一棵 $ n $ 个节点的树,要求满足以下条件: 每个非叶子节点至少包含2个儿子: 以节点 $ i $ 为根的子树中必须包含 $ c_i $ 个节点. 给出 $ n (n<=24)$ 和 $ c_i $ ,问是否存在符合条件的树. 分析 看到数据范围,第一时间想到的方法应该是状压DP,用数 $ s $ 表示已经被选入子树的点的集合,将两个以上小的子树合并为大的子树,看最后能否得到 $ s=1<<(n-1)-1 $ 这一集合.这…
[多校联考2019(Round 5)] [ATCoder3912]Xor Tree(状压dp) 题面 给出一棵n个点的树,每条边有边权v,每次操作选中两个点,将这两个点之间的路径上的边权全部异或某个值,求使得最终所有边权为0的最小操作次数. \(v \leq 15,n \leq 10^5\) 分析 首先把边权转化为点权.记一个点的点权为与它相连的所有边的边权和.当我们给一条路径上的边异或上某个值时,路径端点的点权被异或了1次,而路径上不是端点的点有两条边被异或了,相当于异或了2次,权值不变.因此…
状压DP: 先不考虑数量k, dp[i]表示状态为i的概率,状态转移方程为dp[i | (1 << j)] += dp[i],最后考虑k, 状态表示中1的数量为k的表示可行解. #include<cstdio> #include<iostream> #include<cstdlib> #include<cstring> #include<string> #include<algorithm> #include<map…
题目链接 给n个物品的坐标, 和一个包裹的位置, 包裹不能移动. 每次最多可以拿两个物品, 然后将它们放到包里, 求将所有物品放到包里所需走的最小路程. 直接状压dp就好了. #include <iostream> #include <vector> #include <cstdio> #include <cstring> #include <algorithm> #include <cmath> #include <map&g…
题目链接  Square Subsets 这是白书原题啊 先考虑状压DP的做法 $2$到$70$总共$19$个质数,所以考虑状态压缩. 因为数据范围是$70$,那么我们统计出$2$到$70$的每个数的个数然后从$2$考虑到$70$. 设$dp[x][mask]$为考虑到$x$这个数的时候,$x$这个数和之前的所有数中,选出某些数,他们的乘积分解质因数,所有的指数对$2$取模之后, 状态为$mask$的方案数. 然后就可以转移了……这个状压DP花了我好几个小时……真是弱啊 哦对最后还要特判$1$的…
题目描述 Lena喜欢秩序井然的生活.一天,她要去上大学了.突然,她发现整个房间乱糟糟的--她的手提包里的物品都散落在了地上.她想把所有的物品都放回她的手提包.但是,这里有一点问题:她一次最多只能拿两个物品,她也不能移动她的手提包.并且,因为她爱整洁的习惯,如果她拿起了一个物品,她也不能将它放在其他地方,除非放回她的手提包. Lena把她的房间划分为了一个平面直角坐标系.现在Lena给你她的手提包和每个散落的物品的坐标(当然,一开始的时候她就和手提包站在一个地方).她从坐标 $(x1,y1)$…
题目: lyk有一棵树,它想给这棵树重标号. 重标号后,这棵树的所有叶子节点的值为它到根的路径上的编号最小的点的编号. 这棵树的烦恼值为所有叶子节点的值的乘积. lyk想让这棵树的烦恼值最大,你只需输出最大烦恼值对1e9+7取模后的值就可以了. 注意一开始1号节点为根,重标号后这个节点仍然为根.   update:数据保证叶子节点个数<=20.   例如样例中,将1,2,3,4,5重标号为4,3,1,5,2,此时原来编号为4,5的两个叶子节点的值为3与1,这棵树的烦恼值为3.不存在其它更优解.…
题目链接:http://codeforces.com/problemset/problem/895/C 题意: 给你n个数a[i].(n <= 10^5, 1 <= a[i] <= 70) 问你有多少非空子集s,使得 ∏(s[i])为完全平方数. 题解: 由于a[i] <= 70,而70以内的质数只有19个,显然可以状压. 由于一个数是完全平方数的条件是:它的每种质因子的指数为偶数 所以先处理出对于每个a[i],它的所有质因子指数的奇偶性f[i]. 对于f[i]的每一位,0表示它的…
题意: 有一棵\(n(1 \leq n \leq 13)\)个节点的树,节点的标号为\(1 \sim n\),它的根节点是\(1\). 现在已知它的\(m(0 \leq m < n)\)条边,和\(q(0 \leq q \leq 100)\)个\(LCA\)的关系:\(LCA(a_i, \, b_i)=c_i\) 求满足这些要求的树的个数. 分析: 为了方便,用\(0 \sim n-1\)来表示树的节点. 用\(d(root, \, mask)\)表示以\(root\)为根,选了\(mask\)…
刘汝佳蓝书上的题,标程做法是从终点倒着$spfa$,我是二分答案正着$spfa$判断可不可行.效果是一样的. [注意]多组数据建边一定要清零啊QAQ!!! #include<iostream> #include<cstdio> #include<cstring> #include<queue> using namespace std; int S, T, p; struct Node { int v, nex; Node ( , ) : v ( v ), n…