04 2012 档案
摘要:二维树状数组用来更新矩阵,写法跟一维的很类似。每次增加i&(-i)的值,不过这里增加的是矩阵的横纵下标;写法如下:void add(int x, int y, int d) { int i, j; for(i = x; i < N; i += lowbit(i)) for(j = y; j < N; j += lowbit(j)) mat[i][j] += d;}LL sum(int x, int y) { LL res = 0; int i, j; for(i = x; i > 0; i -= lowbit(i)) ...
阅读全文
摘要:转自白神:http://hi.baidu.com/%B0%D7%D2%C2%C9%D9%C4%EA2012/blog/item/d2a1a43291acbe3c0a55a9b7.htmlSingle Round MatchSRM 522 DIV1 1050pt ( 很不错的dp题,先需要思考来分析各种情况 ) 推荐代码: practice room writerSRM 521 DIV1 500pt ( 枚举+小偏移,考思路 ) 推荐代码: ACRush,crazyb0ySRM 521 DIV1 1000pt ( dp+矩阵相乘,主要是考状态表示和转移矩阵的建立 ) 推荐代码: 官方题解SRM
阅读全文
摘要:div 2200pt:水题,用stringstream方便多了550pt:水题,按题意模拟就行,想清楚了再写,要不然越改越乱!1100pt:我是个二百五!!树形dp,dp你妹啊!把所有的的dis[]*2累加,然后找到一条最长的路,把那条路作为最后走的,减掉回来的距离就可以了!我还在那里想个毛树形dp,叉!View Code #include <vector>#include <list>#include <map>#include <set>#include <queue>#include <deque>#include
阅读全文
摘要:今天做tc遇到一个很简单的,不过结果要求字符串输出,懒得写模拟,学习了一下stringstream,表示很强大数字转字符串:string numtostr(int i) { stringstream ss; ss<<i; return ss.str();}字符串转数字int strtonum(string s) { int num; stringstream ss(s); ss>>num; return num;}下面为转载内容:【本文来自】http://www.builder.com.cn...
阅读全文
摘要:数据结构线段树poj2528,poj2828,poj2777,poj2886,poj2750, poj2892(区间更新)静态二叉检索树,平衡树treap,splaypoj2482, poj3468树状树组poj1195,poj3321, poj2352RMQpoj3264,poj3368并查集的高级应用poj1703, poj2492KMP算法poj1961,poj2406 线段树poj 2528以前做过多次,思路很明显,线段数分区间染色,最后统计颜色的个数。我犯了一个极度二百五的错误,导致这题提交5次!!!col的初始化是-1,更新时我当成0了。T_TView Code #inclu...
阅读全文
摘要:昨晚纠结了半天是看KM算法还是复习软工,最后顶不住挂课的压力复习软工,今天考试还算可以,希望不要挂掉。。。上午上课+考试,感觉比连打几场比赛还累。T_T下午队内DIY,中途停电。。。-_-///然后回来开始研究KM。。。找了很多资料,下面这几个算是让我理解一点的吧,感谢大牛!http://cuitianyi.com/blog/%E6%B1%82%E6%9C%80%E5%A4%A7%E6%9D%83%E4%BA%8C%E5%88%86%E5%8C%B9%E9%85%8D%E7%9A%84km%E7%AE%97%E6%B3%95/http://www.cppblog.com/MatoNo1/a..
阅读全文
摘要:无向图的Tarjan和有向图求强连通分量的Tarjan很像...注意几个不同... 1、没有栈..所以判断时先是看点有没有访问过...else的时候就直接更新Low...不需要再来个判断instack.... 2、DFS时不能从 a 递归到了 b..b又马上从a来更新...所以要多加一个notpre..代表递归b时是从哪个点进去的...防止这种情况.. 3、Low相等的点在无向图中就是在一个双连通图中...这个比有向图的方便..有向图还需要用栈来维护..通过判断退栈来判断强连通分量..摘自:http://blog.csdn.net/kk303/article/details/6881034..
阅读全文
摘要:好久没有单独开贴写解题报告了,这是昨天队里DIY的一道题。题意是给一颗树,问最少在多少个根节点上放上哨兵能监视整棵树。无非就是枚举根节点,选择放还是不放。dp[root][0]表示root节点不放哨兵,则root->v上都要放上哨兵。dp[root][0] = sum(dp[root->v][1]);dp[root][1]表示root节点放哨兵,则root->v节点上取放或者不放的最小值,dp[root][1] = sum(min(dp[root->v][0], dp[root->v][1]));ps:当时纠结在无向图上了,找不到根节点,所以也就没敢继续想。其实只
阅读全文
摘要:大学的我们 怀着憧憬怀着渴望 踏上ACM的舞台 梦想的花朵开始绽放 多少次讨论中思想的碰撞 多少次指尖敲击键盘发出的声响 多少次看到Wrong answer无奈与挣扎 多少次闪出期待Accepted的眼光 多少次出现红色Accepted的喜悦 多少次从早到晚的辛勤付出 多少次伴随着朝阳进入梦乡 或许我们曾被困惑难倒 但我们从未泯灭学习的渴望 或许我们感受到过疲倦 但我们从未放弃追求梦想 小小的电脑承载我们的辛酸和汗水 我们在一次次的思考、编码中成长 风雨兼程,挫折失败 我们一路走来 十年铸剑,只为炉火纯青 一朝出鞘,定当倚天长鸣 看吧,那赛场上飘扬的...
阅读全文
摘要:在这里学会的最小费用最大流问题。定义:图G以S为源点,T为汇点。c(i, j)为G的容量,f(i, j)为G的流,w(i, j)为单位流量的费用且w(i, j) = -w(j, i)。费用wf = ∑(fij * wij) (i, j)∈E(G)。就是求最大流F的情况下保证wf最小。 思想:利用Ford-Fulkerson算法的思想,不断的在残留网络中找增广路,这里找的增广路是当前网络从S到T的以单位流量为权值的最短了。因为涉及道负权,所以可以选择spfa或者bellman-ford。实现代码:const int N = 110;const int M = N*N*2;int n, m,...
阅读全文
摘要:图算法差分约束系统的建立和求解poj1201(1716类似),poj2983, poj3159poj1275, poj1364最小(大)费用最大流poj2516, poj2195, poj3422(最大费用最大流)poj2135(很裸的最小费用最大流,不过有一个大坑。。。)双连通分量poj2942,poj3694强连通分支及其缩点poj2186, poj3592, poj3114图的割边和割点poj3352(外加3117)最小割模型poj3308, poj3155(偏难)详见:http://www.cnblogs.com/vongang/archive/2012/10/25/274004...
阅读全文
摘要:基本算法C++的标准模版库的应用poj3096,poj3007较为复杂的模拟题的训练poj3393,poj1472,poj1027,poj3371,poj2706POJ 3096水题,map,set随便搞POJ 1472TLE了一下午,PE了一晚上。。。我滴神啊!算时间复杂度,用堆模拟。。。参考的代码。。。T_TView Code #include <iostream>#include <cstring>#include <cstdio>#include <cstdlib>#include <string>using namespac
阅读全文
摘要:点结构struct Point { double x; double y; Point(double a = 0, double b = 0) : x(a), y(b) {}};1、浮点数过滤int dbcmp(double x) { if(x > eps) return 1; else if(x < -eps) return -1; return 0;}2、线段求交点(简化一下可以用来判线段相交(规范相交))double det(double x1, double y1, double x2, double y2) { //求叉积 ...
阅读全文
摘要:sudo apt-get install poppler-data 如果还有乱码:sudo rm /etc/fonts/conf.d/49-sansserif.conf
阅读全文
摘要:wikipedia上的证明给定顶点座标均是整点(或正方形格点)的简单多边形,皮克定理说明了其面积A和内部格点数目i、边上格点数目b的关系:A=i+b/2 - 1。证明因为所有简单多边形都可切割为一个三角形和另一个简单多边形。考虑一个简单多边形P,及跟P有一条共同边的三角形T。若P符合皮克公式,则只要证明P加上T的PT亦符合皮克公式(I),与及三角形符合皮克公式(II),就可根据数学归纳法,对于所有简单多边形皮克公式都是成立的。多边形设P和T的共同边上有c个格点。P的面积:iP+bP/2 - 1T的面积:iT+bT/2 - 1PT的面积:(iT+iP+c- 2) + (bT-c+ 2 +bP-c
阅读全文
摘要:计算几何学几何公式poj1265(pick定理)叉积和点积的运用poj2031,poj1039多边型的简单算法和相关判定poj1408,poj1584凸包poj2187,poj1113POJ 1265这题貌似。。。pick定理+线段上的整数点的个数+叉积求多边形面积。。。pick定理:http://www.cnblogs.com/vongang/archive/2012/04/07/2435741.html线段上的整数点的个数:算导上的推论,方程ax ≡ c (mod b)或者对模n有d个不同的解,或则无解。 同余方程可写成 ax + by = c. 即是线段ab上有d个整数点。叉积求...
阅读全文
摘要:物理题,我把公式推错了。。。 两个限制条件,1、能爬上最高坡。2、Sweet Potato在每一个有Bitter Potatoes位置的速度大于等于Bitter 的速度。设要求的初速度为pv1、pv = sqrt(2*g*(maxh - h0));2、pv = tpv = sqrt(vi*vi + 2*g*hi); 为bitter potato纵坐标。View Code #include <iostream>#include <cstring>#include <cstdio>#include <cmath>using namespace std
阅读全文
摘要:优先队列,据说标程是并查集,没思路。貌似优先队列都是直接用stl写的,又逼我用stl了。prioriry_queue不熟。ps: value值越小,优先级越高。所以重载 < 运算符时按优先级从大到小排序bool operator < (const node a, const node b) { if(a.day != b.day) return a.day > b.day; return a.type > b.type;}参考网上的代码View Code 1 #include <iostream> 2 #include <cstdio> 3 #i
阅读全文
摘要:裸奔的矩阵乘法,当模板了。#include <iostream>#include <cstring>#include <cstdio>using namespace std;const int N = 2;const int MOD = 10000;struct Mat { long long mat[N][N]; void init() { for(int i = 0; i < N; ++i) { for(int j = 0; j < N; ++j) mat[i][j] = (i == j); }...
阅读全文
摘要:据说,矩阵快速幂在递推式优化上相当神奇,而且效率很高。。。 两矩阵相乘,朴素算法的复杂度是O(N^3)。如果求一次矩阵的M次幂,按朴素的写法就是O(N^3*M)。既然是求幂,不免想到快速幂取模的算法,这里有快速幂取模的介绍,a^b %m 的复杂度可以降到O(logb)。如果矩阵相乘是不是也...
阅读全文