摘要: 隐式的图搜索,存不下边,所以只有枚举转移就行了,因为bug的存在状态可以用二进制表示,转移的时候判断合法可以用位运算优化,二进制pre[i][0]表示可以出现的bug,那么u&pre[i][0] == u就表示u是可以出现的bug集合的子集,pre[i][1]表示必须出现的bug,那么u|pre[i... 阅读全文
posted @ 2015-08-25 22:56 陈瑞宇 阅读(252) 评论(0) 推荐(0) 编辑
摘要: 先求出原图的最小生成树,然后枚举买哪些套餐,把一个套餐内的点相互之间边权为0,直接用并查集缩点。正确性是基于一个贪心,在做Kruskal算法是,对于没有进入最小生成树的边,排序在它前面的边不会减少。边比较多,用prim求最小生成树,效果比Kruskal好,枚举套餐的时候在用Kruskal。prim和... 阅读全文
posted @ 2015-08-25 18:27 陈瑞宇 阅读(259) 评论(0) 推荐(0) 编辑
摘要: Kruskal+并查集。点很少,按边权值排序,枚举枚举L和R,并查集检查连通性。一旦连通,那么更新答案。判断连通可以O(1),之前O(n)判的,第一次写的过了,后来T。。#includeusing namespace std;const int maxn = 101;const int maxe =... 阅读全文
posted @ 2015-08-25 15:56 陈瑞宇 阅读(897) 评论(0) 推荐(0) 编辑
摘要: 一般来说,把一颗子树离散成一个int,把一个结点的字符离散成一个int会方便处理直接map离散。当然一个结点最多只有4个小写字母,也可以直接编码成一个27进制的整数,舍掉0,为了区分0和0000。需要注意的是有可能只有一个结点。#includeusing namespace std;const in... 阅读全文
posted @ 2015-08-25 14:25 陈瑞宇 阅读(359) 评论(0) 推荐(0) 编辑