摘要: 并查集:(Disjoint Sets)是一种简单的用途广泛的集合. 并查集是若干个不相交集合,能够实现较快的合并和判断元素所在集合的操作,应用很多。一般采取树形结构来存储并查集,并利用一个rank数组来存储集合的深度下界,在查找操作时进行路径压缩使后续的查找操作加速。这样优化实现的并查集,空间复杂度为O(N),建立一个集合的时间复杂度为O(1),N次合并M查找的时间复杂度为O(M Alpha(N)),这里Alpha是Ackerman函数的某个反函数,在很大的范围内(人类目前观测到的宇宙范围估算有10的80次方个原子,这小于前面所说的范围)这个函数的值可以看成是不大于4的,所以并查集的操作可以看 阅读全文
posted @ 2012-07-29 17:11 AbandonZHANG 阅读(282) 评论(0) 推荐(0)
摘要: IOI'95描述在商店中,每一种商品都有一个价格(用整数表示)。例如,一朵花的价格是 2 zorkmids (z),而一个花瓶的价格是 5z 。为了吸引更多的顾客,商店举行了促销活动。促销活动把一个或多个商品组合起来降价销售,例如:三朵花的价格是 5z 而不是 6z, 两个花瓶和一朵花的价格是 10z 而不是 12z。 编写一个程序,计算顾客购买一定商品的花费,尽量利用优惠使花费最少。尽管有时候添加其他商品可以获得更少的花费,但是你不能这么做。对于上面的商品信息,购买三朵花和两个花瓶的最少花费的方案是:以优惠价购买两个花瓶和一朵花(10z),以原价购买两朵花(4z)。格式PROGRAM 阅读全文
posted @ 2012-07-29 17:02 AbandonZHANG 阅读(418) 评论(0) 推荐(0)
摘要: A.Seinfeldhttp://acm.hdu.edu.cn/showproblem.php?pid=3351用num来标记次数,用len来表示 { 的个数 从前开始遍历字符串,如果是 { 就不配对 ,len++,如果是 } 且如果len不为0就len--,在此情况下如果len为零了,就只能将此字符变成 { ,那么num++;遍历完了,如果len不为0就说明剩下了 { 没有配对 此时只需要 num+=len/2即可;View Code #include <fstream>#include <iostream>#include <cstdio>#includ 阅读全文
posted @ 2012-07-29 00:31 AbandonZHANG 阅读(231) 评论(0) 推荐(0)