随笔分类 -  模板

摘要:最小树形图求的是有向图的最小生成树,跟无向图求最小生成树有很大的区别。步骤大致如下:1.求除了根节点以外每个节点的最小入边,记录前驱2.判断除了根节点,是否每个节点都有入边,如果存在没有入边的点,说明树形图不存在,退出。3.沿着节点的前驱找,如果发现环,把环缩点。4.如果不存在环,结束。否则,跳到1.其实我是来贴模板的。。。比较好的讲解:最小树型图的求解与实现代码讲解比较好的:hdu4009 Transfer water ( 最小树形图的模板 )用IO优化时死活TLE,改了scanf就过了,后来用!=EOF发现数据不全,怪不得TLE了,囧#include #include #include # 阅读全文
posted @ 2013-09-09 23:15 yejinru 阅读(242) 评论(0) 推荐(0) 编辑
摘要:QTREE2经典的倍增思想题目:给出一棵树,求:1.两点之间距离。2.从节点x到节点y最短路径上第k个节点的编号。分析: 第一问的话,随便以一个节点为根,求得其他节点到根的距离,然后对于每个询问(x,y),想求得lca(x,y),直接用dis[x]+dis[y]-2*dis[ lca(x,y) ]即可。 第二问的话,可以用倍增的方式求。我们通过求得节点x,y,lca(x,y)的深度,判断第k个节点落在哪个链上,该链是指是从x到根或者从y到根。最后倍增可以轻松求出一个链上第k个父亲是谁了。 我实现的时候,lca以及求某个节点的第k个祖先都是用倍增的思想实现。#include #incl... 阅读全文
posted @ 2013-08-25 21:17 yejinru 阅读(480) 评论(0) 推荐(0) 编辑
摘要:《树链剖分及其应用》一文讲得非常清楚,我一早上就把他学会了并且A了这题的入门题。spojQTREE题目:给出一棵树,有两种操作:1.修改一条边的边权。2.询问节点a到b的最大边权。直接粘代码。更成熟的代码可以看下一篇BZOJ 1036: [ZJOI2008]树的统计Count#include #include #include #include #include #include #include #include #include #include #include #include using namespace std;typedef long long ll;typedef unsig 阅读全文
posted @ 2013-08-24 12:26 yejinru 阅读(394) 评论(0) 推荐(0) 编辑
摘要:/*题目: 求最小费用最大流的裸模板分析: 每次找到一条最短路,然后记录下每个经过的节点的前驱结点,然后若能够 到达终点的话,从终点开始往回找到最小流,然后再从终点往回依次更改当 前每条边的流量以及反向弧,直到不能再找到一条最短路为止,找最短路的 算法是spfa*/#include #include #include using namespace std;const int maxn = 10005;const int maxm = 1000005;const int inf = 1e8;#define debug puts("here");int n,m,s,... 阅读全文
posted @ 2012-09-16 16:57 yejinru 阅读(198) 评论(0) 推荐(0) 编辑
摘要:1 /* 2 *最大流模板(引用学长的模板。。。) 3 * SAP(当前弧优化+GAP优化)非递归形式 7 */ 8 9 #include 10 #include 11 #include 12 13 #define SETZR(a) memset(a,0,sizeof(a)) 14 15 using namespace std; 16 17 //定义常量:边数、点数和无穷 18 const int MAXM = 1000000; 19 const int MAXN = 10000; 20 const int INF = 1000000000; 21 22 /... 阅读全文
posted @ 2012-09-16 16:54 yejinru 阅读(594) 评论(0) 推荐(0) 编辑