上一页 1 ··· 12 13 14 15 16 17 18 19 20 ··· 26 下一页
摘要: 最短路对应费用,路径数量对应流量。为限制点经过次数,拆点为边。跑一次流量为2的最小费用最大流。最小费用最大流和最大流EK算法是十分相似的,只是把找增广路的部分换成了求费用的最短路。#includeusing namespace std;typedef long long ll;const int m... 阅读全文
posted @ 2015-08-26 15:12 陈瑞宇 阅读(172) 评论(0) 推荐(0) 编辑
摘要: 互相可以打电话是一个传递关系,所以Floyd求传递封包,dfs找一个尽量大的圈。#includeusing namespace std;const int maxn = 25;map mp;map::iterator it;vector names;bool d[maxn][maxn];int ID... 阅读全文
posted @ 2015-08-26 15:11 陈瑞宇 阅读(152) 评论(0) 推荐(0) 编辑
摘要: 很经典的网络流模型,行编号和列编号分别看成一个点,行和列和分别看出容量,一个点(x,y)看出是一条边,边的容量下界是1,所以先减去1,之后在加上就好了。建图的时候注意分配好编号,解从残留网络中的边找。前向星建图的话,打印解会比较麻烦。#includeusing namespace std;const... 阅读全文
posted @ 2015-08-26 11:50 陈瑞宇 阅读(247) 评论(0) 推荐(0) 编辑
摘要: 关键在建图,转换器连一条容量无限的边表示可以转化无数次,设备的插头连源点,插座连汇点。dinic手敲已熟练,输出格式又被坑,总结一下,输出空行多case的,一个换行是必要的,最后一个不加空行,有Testcase最后一个不要换行,没有testcase最后一个要加换行,想起那天gold miner PE... 阅读全文
posted @ 2015-08-26 00:25 陈瑞宇 阅读(178) 评论(0) 推荐(0) 编辑
摘要: 隐式的图搜索,存不下边,所以只有枚举转移就行了,因为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) 编辑
摘要: 一开始想着球盒模型,数据范围大,递推会GG。用凑的方法来算方案。往n个小球之间插两个隔板,方案是(n-1)*(n-2)/2,不区分盒子,三个盒子小球数各不相同的方案数被算了6次(做排列),两个相同的被算了3次,如果n可以被3整除,那么3个相同的被算了一次。全部都加到6,在一起除以6就得到总的方案数。... 阅读全文
posted @ 2015-08-24 14:07 陈瑞宇 阅读(232) 评论(0) 推荐(0) 编辑
摘要: 枚举盒子的个数,先把总数n减去掉box*k保证每个盒子至少有k个小球,剩下的小球放入盒子中可以为空,加入box个小球保证每个盒子至少有一个小球,问题转化成不可区分小球放入不可区分盒子非空的方案数。C[i][j]表示i个小球放入j个盒子非空的方案数,那么C[i][j] = C[i-1][j-1]+C[... 阅读全文
posted @ 2015-08-24 13:26 陈瑞宇 阅读(226) 评论(0) 推荐(0) 编辑
摘要: D. Minimizationtime limit per test2 secondsmemory limit per test256 megabytesinputstandard inputoutputstandard outputYou've got array A, consisting of... 阅读全文
posted @ 2015-08-23 18:47 陈瑞宇 阅读(343) 评论(0) 推荐(0) 编辑
摘要: CNF 2 'In Boolean logic, a formula is in conjunctive normal form (CNF) or clausal normal form if it is a conjunction of clauses, where a clause is a ... 阅读全文
posted @ 2015-08-23 15:17 陈瑞宇 阅读(416) 评论(0) 推荐(0) 编辑
摘要: 一个合法的三角形的充要条件是a=b+c+r,很容易转化为rusing namespace std;typedef long long ll;ll cal(int a,int b,int c,int tl){ int r = (a-b-c+tl)>>1; if(rtl) r = tl; ... 阅读全文
posted @ 2015-08-23 12:31 陈瑞宇 阅读(357) 评论(0) 推荐(0) 编辑
摘要: 状压dp,每个状态可以表示为一个n元组,且上限为8,可以用一个九进制来表示状态。但是这样做用数组开不下,用map离散会T。而实际上很多九进制数很多都是用不上的。因此类似uva 1601 Morning after holloween的思想,先dfs预处理出所有状态,用map将状态离散,预处理出算出状... 阅读全文
posted @ 2015-08-22 18:48 陈瑞宇 阅读(354) 评论(0) 推荐(0) 编辑
摘要: 状压dp,用s表示已经询问过的特征,a表示W具有的特征。当满足条件的物体只有一个的时候就不用再猜测了。对于满足条件的物体个数可以预处理出来转移的时候应该枚举询问的k,因为实际上要猜的物品是不确定的,要么k是W所具有的,要么k不是W所具有的,要保证能猜到那么就应该取最坏情况下的最小值,所以有转移方程:... 阅读全文
posted @ 2015-08-21 19:38 陈瑞宇 阅读(423) 评论(0) 推荐(0) 编辑
上一页 1 ··· 12 13 14 15 16 17 18 19 20 ··· 26 下一页