考虑当前合法的一个点集s,如果他合法,那么一定有一个完备匹配的点集包含这个点集,也就是两边都满足hall定理的话这两边拼起来的点集也满足要求 所以分别状压两边点集用hall定理转移判断当前点集是否合法,然后分别对两边点集的权值和排个序2point扫一下计算答案即可 #include<iostream> #include<cstdio> #include<algorithm> using namespace std; const int N=2000005; int n,…
题意 给一张$n\times m$二分图,带点权,问有多少完美匹配子集满足权值和大于等于$t$ 这里有一个结论:对于二分图$\mathbb{A}$和$\mathbb{B}$集合,如果子集$A \in \mathbb{A},B \in \mathbb{B}$,且$A,B$分别是完美匹配的子集,那么$A \cup B$属于一个完美匹配 有了这个结论之后,考虑单侧,枚举子集$S$,利用霍尔定理判定$S$是否是完美匹配,并通过dp转移状态,记录下单侧所有满足条件的权值和,然后两侧一起考虑累加得到答案 时…
2019.1.9交流题,现在看还是不会,,, 如果只有一边,那么Hall定理即可. 两边?分别满足Hall定理,就是合法的! 证明(构造方案): 左集合先任意形成一个合法匹配,单点增量加入右集合和与右集合有关的边进行调整 加入bj,枚举连接bj的边,连向ai 直接大力匈牙利匹配即可.由于Hall定理成立,所过之处一定能返回true DP之后双指针即可. 注意,左.右是空集合也合法 #include<bits/stdc++.h> #define reg register int #define…
题目链接: BZOJ - 2004 题目分析 看到题目完全不会..于是立即看神犇们的题解. 由于 p<=10 ,所以想到是使用状压.将每个连续的 p 个位置压缩成一个 p 位 2 进制数,其中共有 k 位是1,表示这 k 个位置是某辆 Bus 当前停下的位置.需要注意的是,每个状态的第一位必须是 1 ,这样保证了不会有重复的状态. 每个状态可以转移到右边的某些状态(由当前状态的第一个 1 移动).初始状态和终止状态都是前面 k 位是 1 .用矩阵转移 n - k 次. 代码 #include <…
Exclusive Access 2 Description 给出 N 个点M 条边的无向图,定向得到有向无环图,使得最长路最短. N ≤ 15, M ≤ 100 Input Format 第一行一个数M (1≤M≤100). 接下来M行,每行两个大写字母(L 到 Z),最多出线15个不同的大写字母.每行的两个大写字母不会相同. Output Format 第一行输出最长路最短的数值-1. Sample Input 3 P Q Q R R P Sample Output 1 解析 二分答案?想多…
Description  Input 本题包含多组数据. 第一行:一个整数T,表示数据的个数. 对于每组数据: 第一行:两个整数,N和K(含义如题目表述). 接下来N行:每行一个字符串. Output 1 2 1 a? ?b Sample Input 50 Sample Output 对于30%的数据,T ≤ 5,M ≤ 5,字符串长度≤ 20: 对于70%的数据,T ≤ 5,M ≤ 13,字符串长度≤ 30: 对于100%的数据,T ≤ 5,M ≤ 15,字符串长度≤ 50. [思路] 状压D…
Description 小F 的学校在城市的一个偏僻角落,所有学生都只好在学校吃饭.学校有一个食堂,虽然简陋,但食堂大厨总能做出让同学们满意的菜肴.当然,不同的人口味也不一定相同,但每个人的口味都可以用一个非负整数表示.由于人手不够,食堂每次只能为一个人做菜.做每道菜所需的时间是和前一道菜有关的,若前一道菜的对应的口味是a,这一道为b,则做这道菜所需的时间为(a or b)-(a and b),而做第一道菜是不需要计算时间的.其中,or 和and 表示整数逐位或运算及逐位与运算,C语言中对应的运…
传送门 题意:对于任意一个正整数 n≤100000,如何求出{1, 2,..., n} 的满足若 x 在该子集中,则 2x 和 3x 不能在该子集中的子集的个数(只需输出对 1,000,000,001 取模的结果) 好巧妙的转化啊: 构造一个矩阵,把限制关系转化成矩阵的相邻元素不能同时选 1 3  9  27… 2 6 18 54… 4 12 36 108… 然后愉♂悦的状压DP就可以啦 注意每一个既不被$2$又不被$3$整除的数都可以作为矩阵的第一个元素,还有矩阵不一定填满 #include…
传送门 题意:$n$种宝物,出现$k$次每次一种,每种宝物有价值和吃掉它之前必须要吃掉的宝物的集合,求采取最优策略的期望最大价值 1<=k<=100,1<=n<=15,分值为[-10^6,10^6]内的整数. 看到$n$应该想到状压.... $f[i][s]$表示前$i$次已经吃掉的集合为$s$的期望最大值 然而正推的话,答案是谁呢? 所以倒推,表示这个状态到结束得到的期望最大值 转移枚举出现的宝物,最后乘上概率$\frac{1}{n}$ #include <iostream…
为什么这道题网上所有题解写的都是N*Len的trie树的暴力啊,4E的复杂度... 为什么暴力还跑这么快啊TAT.. 有一个O(Len)的做法就是先把AC自动机建出来,因为每个字典串的长度很小,所以我们可以用fail树状压一发,每个节点记录一个值ss,表示这个点向前(1~10)的长度的串是不是一个字典串,这个东西延fail树递推就行了. 然后每次把每个串放AC自动机上走,同时记录一个值T表示(s(1,i-11)~s(1-(i-1)))这些串能否成为答案,如果如果T&ss!=0那么i这个点就可以成…