上一页 1 2 3 4 5 6 7 ··· 13 下一页
摘要: 这道题用的是并查集,刚刚看到这道题的时候想起来自己OJ的一道有点相似的题,说是每条边有一个等级,两个点之间的连接等级为路径上所有边的最高等级,很像,但是因为这道题的边有权值而且还要算最大值,结果自己这个想法就只是想了想,然后看了别人的解题报告,还真是并查集,看来自己的第一反应还挺重要的,把边降序排序,这样保证新加的一条边肯定是最短的,分别对这条边连接的两个点作为这一部分中选中的点找最优值,直到把所有的边加完View Code 1 #include<iostream> 2 #include<cstring> 3 #include<cstdio> 4 #incl 阅读全文
posted @ 2012-10-16 22:42 zhenhai 阅读(196) 评论(0) 推荐(0)
摘要: 状态压缩DP,先对M进行质因子分解,记录其次数,然后对M的所有因子进行统计,分别计算每个因子对应的状态(只有当因子的质因子次数和M相同时这一位才置1),也就是说,如果一个数的每一个质因子次数都没有达到M的质因子次数这个数所表示的状态就是0,然后进行状态DP,其实就是递推,不能算是DP,这个用递推会比记忆化搜索要好,因为记忆化搜索的时候要考虑到底要不要取某一个值,取多少个,用异或没有递推的时候用|实现简单View Code 1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #define 阅读全文
posted @ 2012-10-16 19:53 zhenhai 阅读(472) 评论(0) 推荐(0)
摘要: 2012年长春赛区B题,根据位运算的关系可以得到当某一个数的某一位取一个值时,跟其有相应运算关系的另一些数,就必须或者就不能取某些值,这样就可以利用2-sat问题解决,关于2-sat问题的加边技巧:/*2-SAT问题,通俗的说就是有n对点(2n个点),从每对点中选出一个点,共选出n个点,而且要满足若干个这样的条件:某两点不能同时被选出。 设一对点为x、~x,如果a被选出则b一定要被选出,就在图中加有向弧(a,b)表示这种关系。那么如果a,b(a!=b,a!=~b)不能同时被选出,那么加两条有向弧(a,~b),(b,~a)。这样由图的对称性可以证明,2-SAT有解等价于任取x、~x,x、~x不在 阅读全文
posted @ 2012-10-16 12:16 zhenhai 阅读(369) 评论(8) 推荐(0)
摘要: 二维最近点对问题,关于这个问题网上和算法导论上都由详细的介绍http://hi.baidu.com/bananas122/item/fbc7a2b6d766bf6e254b09e4这个解释的挺好,并且还有计算,其他的就是代码实现的问题,另外这个题要加一个标志位,就没什么特殊的了View Code 1 #include<iostream> 2 #include<cstring> 3 #include<cstdio> 4 #include<cstdlib> 5 #include<cmath> 6 #include<algorithm 阅读全文
posted @ 2012-10-07 16:51 zhenhai 阅读(228) 评论(0) 推荐(0)
摘要: 模拟退火,第一次做模拟退火,搞了好几天才明白原理是怎么回事,启发式算法,运行时程序不稳定,会有一定的概率性,这些启发式算法有很多共同的特点,百度百科里有对启发式算法的简单介绍,数学中国网有很多模拟退火和其他启发式算法的很多资料,主要是数学建模方面的,但是知识都是互通的,学一学也很好,http://baike.baidu.com/view/476038.htm其实看程序就比较好理解启发式算法的思想了,但是我找了很多解题报告,发现都没有出现概率性选择并不是最优解的解决办法,有的利用了同时产生好几个点,利用并发性,这也不能算是概率性选择,还是搞不太明白怎么办。但是就这道题说还是比较简单的,确定步长, 阅读全文
posted @ 2012-10-06 19:50 zhenhai 阅读(578) 评论(0) 推荐(0)
摘要: 又一道矩形面积并,只要要统计七种颜色分别的面积,所以在线段树里维护一个颜色数组,一个各种颜色覆盖长度的数组,其余的和求矩形面积并就很类似了View Code 1 #include<iostream> 2 #include<cstring> 3 #include<cstdio> 4 #include<algorithm> 5 #define N 10005 6 #define L(x) (x<<1) 7 #define R(x) (x<<1|1) 8 using namespace std; 9 typedef long l 阅读全文
posted @ 2012-09-30 15:27 zhenhai 阅读(264) 评论(0) 推荐(0)
摘要: 这道题有很多人用欧拉函数做的,我用的是容斥定理,要找第k个和m互素的数,先二分答案,然后用容斥定理计算在1-ans之间有多少个与m互素的元素,这里要用到容斥定理,假设1到mid中有k个与m互素,而且mid是最小的一个,那么我们就可以说mid是第k个与m互素的数。。这样就可以用到2分的思想,讲1到inf进行2分,2分出最小的符合有k个与m互素的数的数就行了。。。对于就1到mid中有多少个与m互素的数需要用到容斥原理:比如假设m=12;mid=1312=2*2*3那么1到mid中与m不互质的数就有2,3,4,6,8,9,10,12,其实就是2的所有倍数,以及3的所有倍数这样我们就 算出与1到13中 阅读全文
posted @ 2012-09-29 21:23 zhenhai 阅读(257) 评论(0) 推荐(0)
摘要: 链接:http://acm.hdu.edu.cn/showproblem.php?pid=4297这道题所给的图是一个森林,每一个子图都必有一个环(因为总边数为n),可以把环当做这棵树的根节点,那么如果两个点不在一棵树上,一定互相不可达,如果在一棵树上,如果两个点在同一棵子树上,那么一起到的点就是LCA,所以要维护森林的LCA,如果不在同一棵子树上,则要到各自的根节点,然后沿着环方向分别判断哪种情况是最优解。View Code 1 #pragma comment(linker, "/STACK:10240000000,10240000000") 2 #include< 阅读全文
posted @ 2012-09-21 18:35 zhenhai 阅读(462) 评论(0) 推荐(0)
摘要: 直接从别人那复制的代码,惭愧啊,看懂了为自己储存模板。View Code 1 #include<iostream> 2 #include<cmath> 3 #include<cstring> 4 #include<cstdio> 5 #define N 505 6 #define eps 0.000001 7 using namespace std; 8 struct Point 9 { 10 double x,y,z; 11 Point(){} 12 Point(double _x,double _y,double _z) 13 { 14 .. 阅读全文
posted @ 2012-09-15 12:02 zhenhai 阅读(162) 评论(0) 推荐(0)
摘要: 这两个一个函数和一个宏定义,可以加快读入整型数据的速度,增加程序允许的栈容量,防止一些较深的递归导致爆栈View Code 1 template <class T> 2 int read_num(T *x) { 3 int ch; 4 bool sign = 0; 5 while (EOF != (ch = getchar()) && ('0' > ch || ch > '9') && ch != '-') ; 6 if (EOF == ch) return EOF; 7 if (ch == 阅读全文
posted @ 2012-09-12 21:03 zhenhai 阅读(284) 评论(0) 推荐(0)
上一页 1 2 3 4 5 6 7 ··· 13 下一页