- 博客(20)
- 收藏
- 关注
原创 线段树模板
线段树1(加法)#include<iostream>#include<cstdio>#define root 1,n,1#define lson l,mid,rt<<1#define rson mid+1,r,rt<<1|1#define LL long longusing namespace std;const int maxn...
2019-03-16 12:18:03
132
转载 导弹拦截的另解
导弹拦截是很老很经典的dp入门题了,它的主要方法如n^2dp和队列优化都是很入门的方法。但是如果导弹拦截问题转到多维空间(如三维),即维度不只有高度,还可能有多个参数限制时,这个问题又该如何解决呢?这时候需要用到图论的知识了。第一问是最长序列,与正常n^2dp的做法一样。但是第二问并不能更换符号再次dp来实现(包括队列优化也不行,可以自己试一下)。这时我们注意到,导弹拦截的
2017-10-29 19:12:08
281
转载 BZOJ1103【POI2007】大都市meg <树上差分+树状数组>
BZOJ1103【POI2007】大都市meg 【POI2007】大都市megDescription在经济全球化浪潮的影响下,习惯于漫步在清晨的乡间小路的邮递员Blue Mary也开始骑着摩托车传递邮件了。不过,她经常回忆起以前在乡间漫步的情景。昔日,乡下有依次编号为1..n的n个小村庄,某些村庄之间有一些双向的土路。从每个村庄都恰好有一条路径到达村庄1(即比特
2017-10-28 22:40:57
279
原创 noip 2017 模拟 D1 T3
题目背景在一个叫做Travian的世界里,生活着各个大大小小的部落。其中最为强大的是罗马、高卢和日耳曼。他们之间为了争夺资源和土地,进行了无数次的战斗。期间诞生了众多家喻户晓的英雄人物,也留下了许多可歌可泣的动人故事。其中,在大大小小的部落之间,会有一些道路相连,这些道路是Travian世界里的重要枢纽,简单起见,你可以把这些部落与部落之间相连的道路看作一颗树,可见每条道路
2017-10-28 22:34:01
378
转载 树状数组浅析
树状数组 动态连续和查询问题。给定一个n个元素的数组a1、a2、……,an,设计一个数据结构,支持以下两种操作:1、add(x,d):让ax增加d;2、query(l,r):计算al+al+1+…+ar如何让query和add都能快速完成呢?方法有很多,这里介绍的便是树状数组。为此我们先介绍lowbit。 对于正整数x,我们定义lowbit(x)为x的二进制表达式中
2017-10-20 19:57:17
200
原创 (刷题日志)最小生成树
生成树三连:一:P1546 最短网络 Agri-Net题目背景农民约翰被选为他们镇的镇长!他其中一个竞选承诺就是在镇上建立起互联网,并连接到所有的农场。当然,他需要你的帮助。题目描述约翰已经给他的农场安排了一条高速的网络线路,他想把这条线路共享给其他农场。为了用最小的消费,他想铺设最短的光纤去连接所有的农场。你将得到一份各农场之间连接费用的列
2017-10-14 21:33:03
242
转载 有树形依赖的背包问题
转载:http://www.cnblogs.com/GXZC/archive/2013/01/13/2858649.html【参考资料】徐持横--2009年国家集训队论文《浅析几类背包问题》 http://wenku.baidu.com/view/8ab3daef5ef7ba0d4a733b25.html 《背包九讲》 http://w
2017-10-03 11:57:55
924
转载 ST表学习
作用:ST算法是用来求解给定区间RMQ的最值,本文以最小值为例举例:给出一数组A[0~5] = {5,4,6,10,1,12},则区间[2,5]之间的最值为1。方法:ST算法分成两部分:离线预处理 (nlogn)和 在线查询(O(1))。虽然还可以使用线段树、树状链表等求解区间最值,但是ST算法要比它们更快,而且适用于在线查询。(1)离线预处理:运用DP思想,用于求解区间最值,并保
2017-10-03 11:44:49
182
原创 图论总结(10)二分图匹配
二分图匹配都能用网络流来解决,但代码太复杂。先是简单的最大匹配(无权):KM死磕了很久才看懂。直接匈牙利:模板://int S[maxn];int T[maxn];int Left[maxn];int m,n;//int Right[maxn];bool match(int i){ for(int j=1;j<=n;j++)if(!T[j]&&G[i][j]){
2017-08-25 16:47:42
293
原创 图论总结(9)网络流问题
说实话网络流学得很浅,只能做点水题,没时间练题了。下面总结下几类题型。一.最大流问题概述问题就是一个有向图,每条边都有个容量,给你源点s和汇点t,问你从s到t的最大流量是多少。用增广路算法可以解决先求出每条边对应反向边的残量,构造出残量网络,若残量网络中有从s到t的路径,则s到t存在增广路(简单理解为可以是流量变大的路径),显然但残量网络中不存在增广路时有最大流量。Edmo
2017-08-24 20:28:42
547
原创 图论总结(8)最小生成树
最小生成树就是给你一个n个点的带权图,连了很多边,我们都知道连接n个点至少要n-1条边,这时图就变成了树,问你最少的权值和为多少。下面给出两种算法,个人偏好第二种一.prim算法prim算法是基于贪心法来求的最小生成树。vis数组表示是否已经进入最小生成树,min(u)数组表示为进树的点u离树上的点的最小距离。模板:#include #includeusing name
2017-08-24 17:10:47
240
原创 图论总结(7)并查集
并查集虽然是数据结构,但还是把它 放在图论里总结了吧,后面用最小生成树是要涉及到。个人理解并查集就是用来处理集合,"并"是合并两个集合,“差”是查找一个的元素在哪个集合里,“集”就是集合啦。并查集的关键就是用一个集合中代表元素来代表该集合。上模板:#include#includeusing namespace std;const int maxn=20001;int fat
2017-08-24 17:09:20
188
原创 图论总结(6)最短路问题
最短路就是求图中两点的最短距离最短路的算法这里写三种一.Floyed-Warshall算法(O(N^3))这是求最短路最简单的算法(求出所有点的最短路,适用于负权边,但不适用与负权回路)int G[maxn][maxn],pre[maxn][maxn];int n;void print(int x,y){ if(pre[x][y]==0)return; print(x,pr
2017-08-24 15:29:47
217
原创 图论总结(5)2—SAT问题
SAT问题是最早的NPC问题。2—SAT问题是这样的:有n个布尔变量,另有m个需要满足的条件,每个条件的形式都是(xi为真/假或者xj为真/假),2—SAT问题的目标是给每个变量赋值,使得所有的条件得到满足。一种解法:构造一张有向图G,其中每个变量xi拆成两个节点2i和2i+1,分别表示xi为假和xi为真。最后要为每个变量选其中一个节点标记。比如,若标记了2i,表示xi为假,标记了2i+1
2017-08-24 15:00:36
454
原创 图论总结(4)有向图的强连通分量
有向图的强连通分量:有向图G中,如果有两个顶点间至少存在一条路径,称两个顶点强连通(stringly connected),简称SCC。如果有向图G的每个顶点都强连通,则称G是一个强连通图。非强连通图的极大强连通子图,称为强连通分量。蓝书上给了两种算法:一.Kosaraju算法:按照SCC图拓扑排序的逆序进行遍历。先正序遍历的到拓扑排序,再构造G的反向图G2(所有边相反),
2017-08-24 11:09:56
798
原创 图论总结(3)无向图的双连通分量
概念:1.如果任意两点存在至少两条“点不重复”的路径,则说这个图是点-双联通的(一般简称双联通BCC)。这个要求等价于任意两边都在同一个简单环中,即内部无割顶。 2.类似的,如果任意两点至少存在两条“边不重复”的路径,我们说这个图是边——双连通的。这个要求低一点,只需要每条边至少在一个简单环中,即所有边都不是桥。对于一张无向图,点双连通的极大子图称为双连通分量。可
2017-08-24 10:15:06
392
原创 图论总结(2)无向图的割顶和桥
概念:对于无向图G,如果删除某个节点u后,连通分量的数目增加,则称u为图的关节点或割顶。定理:在无向连通图G的dfs树中,非根节点u是G的割顶当且仅当u存在一个子节点v,使得v及其所有后代都没有反向边连回u的祖先(u不算)。证明略;方便起见,设low【u】为u及其后代所能连回的最早的祖先的pre(编号值)值,则定理中的条件就能够简写为low(v)>=pre(u);如果后...
2017-08-23 20:57:10
766
原创 图论总结(1)深度优先遍历
感觉图论嗑得差不多了做点总结吧。听所图论题套模板,下面就给一些模板吧。1.DFS框架(依次递归访问当前节点的所有相邻节点):vector<int>G[maxn];int vis[maxn];void dfs(int u){ vis[u]=1; PREVISIT(u);//访问u前的操作 int d=G[u].size(); for(int i=0;i&l...
2017-08-23 19:53:03
1225
原创 UVA11419 SAM I AM (二分图最小覆盖)
二分图中最小覆盖数=最大匹配数证明:http://blog.csdn.net/qq_30802053/article/details/77482209用匈牙利算法求最大匹配数;下面再求输出方案:上面的连接讲了求最小覆盖数的选择点,选择Right[i]==-1(就是找非匹配边)的点进行match(i),然后选S集合中未标记的和T集合中标记了的就是输出方案。代码:#incl
2017-08-22 17:45:37
390
转载 二分图最大匹配的König定理及其证明
转自(http://www.matrix67.com/blog/archives/116)二分图最大匹配的König定理及其证明 本文将是这一系列里最短的一篇,因为我只打算把König定理证了,其它的废话一概没有。 以下五个问题我可能会在以后的文章里说,如果你现在很想知道的话,网上去找找答案: 1. 什么是二分图; 2. 什么是二分图的匹配;
2017-08-22 16:42:34
311
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人