图论(各种树)
Gloria971111
From InSane, To what ?I don't know !
展开
-
图论小结(最小生成树)
最小生成树是指一个图,然后怎么能够让它连通起来并且所有的边的权重加起来最短,是一个全局的作用,要用到并查集,并查集是一个“分帮结派”的过程,重点是father数组、find函数和join函数,一个图,每两个点之间有一条线,则这两个点就是一家的,有共同的根节点,其中一个为另一个的father,在寻找的过程中,一个家族的点,father可能不一样,但是find(x)的值肯定是一样的,为根节点,当然这个是原创 2017-08-03 19:46:26 · 626 阅读 · 1 评论 -
codeforces 1037D- Valid BFS?
#include<bits/stdc++.h>#include<vector>#include<iostream>using namespace std;#include<queue>int n;typedef struct Point{ int num; int father; vector<int&...原创 2018-09-03 17:05:01 · 275 阅读 · 0 评论 -
ACM-ICPC 2018 南京赛区网络预赛-L题(分层图最短路)
哎呀这个图论是真的辣鸡啊… 题意:n个城市(N≤100000),m条单向路(M≤200000),过路是要有花费的,可以将k(k≤10)条路的花费变为0,求从1-n的最短路。这个题目就是分层图最短路,把图拆成k+1层,然后每个点拆成k+1个点,这样就有1e6个点,对着1e6个点进行最短路的计算,堆优化的Dijkstra,O(m+n)logn,大概是1e7的时间复杂度是可以过的!我们把每个点...原创 2018-09-02 16:36:21 · 530 阅读 · 0 评论 -
hdu6370
WA到崩溃,明天再说吧#include<iostream>using namespace std;#include<vector>int n;typedef struct Point{ int father; int initfather; int son; int talkpoint; int good;};P...原创 2018-08-08 22:39:33 · 311 阅读 · 0 评论 -
拓扑排序
拓扑排序是基于DAG(有向无环图)来排出一个大小顺序,简单来说就是有严格大小关系的绝对不能错,没有严格大小关系的就是顺序随意(但是也要有固定的顺序),将一个图排成有序的一个线性序列。 应用:比如一个很多的2v2比赛(选手有重复),知道其中很多场的结果,然后排出一个总名次;选课,有些课在选之前有先导课,必须学完基础课才能学高级的课。拓扑排序的实现就是,法①:维护一个入度为0的数组,法②:dfs一个初原创 2017-12-23 19:14:11 · 211 阅读 · 0 评论 -
最小生成树(Prime and Kruskal)
极小连通子图:这个子图是连通的,删掉其中任意一条边则不连通。 生成树:包含一个图所有的顶点的极小连通子图。 最小生成树:代价最小,所有的边权值加起来最小。 最小生成树应用举例:城市之间修路,每两个城市之间需要能够相互到达(直达或者间接到达),花费最小。 最小生成树算法:Prime算法、Kruskal算法 Prime算法:归并点,适合于稠密图 Kruskal算法:归并边,适合于稀疏图Pri原创 2017-12-22 11:15:55 · 465 阅读 · 0 评论 -
HDU2795Billboard
线段树的应用,比较巧妙在于把update和query函数合并,从题意转换到线段树也是一个坎,我现在只是能敲出来,感觉还是不明白为什么这样…AC代码#include<iostream>using namespace std;#include<algorithm>int h, w, n;struct Tree{ int left, right, max;}tree[200005*4];v原创 2017-08-11 16:39:44 · 170 阅读 · 0 评论 -
最简单的Dijkstra
今天学习了图论中的最短路,学习了两种方法,Dijkstra和Bellman-Ford,我听不懂昨天在CF上做的那道题,所以就看了杭电HDU2544上的最简单的最短路问题,结合小红本,终于看懂了迪杰斯特拉算法的代码,开森~#include<iostream>using namespace std;#include<string>#define INF 99999999;int map[110]原创 2017-07-25 12:51:04 · 415 阅读 · 0 评论 -
HDU2544(Dijkstra优先队列优化版)
#include<iostream>using namespace std;const int maxn = 1000001;struct node{ int to; int w; int next;}e[maxn];int n, m, tot, minn, k, dis[maxn], head[maxn];int qi, zhong;bool flag[ma原创 2017-07-25 16:34:33 · 292 阅读 · 0 评论 -
树状数组的两道基本题
上个周学习了树状数组,但是没有怎么听懂,今天学习了线段树,较树状数组更好理解一些,弄懂了线状树之后,重看树状数组,感觉懂了一些。 我认为这两种方法都是将二分巧妙地运用在搜索的过程中,只不过方向相反,线状树是不断二分的过程,树状数组是不断拼凑出树的过程(将来深入理解之后说不定会推翻现在的想法,那谁知道呢,哈哈)。 今天先说树状数组。有两道题帮助我理解。 题一敌兵布阵,题二Stars原创 2017-08-07 20:06:14 · 250 阅读 · 0 评论 -
hdu1394最小逆序数——线段树
线段树较于树状数组更好理解一些,其基本就是核心就是一个结构体(树的每个点),一个build函数,一个update函数,一个Query函数。struct Tree{ int left,right,max;//其中左右节点和需要存储的有用的东西,这个视情况而定,可以是这个区间内的最大值,也可以是这个区间的和等等。};线段树是一个二分法的巧妙应用,分到左=右就结束了。 下面分享看线段树遇到的原创 2017-08-09 19:50:37 · 413 阅读 · 0 评论 -
线段树lazy标记
http://poj.org/problem?id=3468 http://acm.hdu.edu.cn/showproblem.php?pid=2795OK,I haven’t understood it , orz… Maybe I need more time…原创 2017-08-10 10:30:00 · 341 阅读 · 0 评论 -
LCATarjan离线算法
怎么说离线算法呢,我觉得就是说你把想要询问的东西提前存起来了,这样在遍历然后顺便建树的过程中就可以随时回答这个问题,然后再进行相应的更新…http://www.cnblogs.com/JVxie/p/4854719.html ☝这个博主写得很不错,我就是这么看懂的。#include<iostream>using namespace std;#include<vector>#include<a原创 2017-08-14 11:16:47 · 691 阅读 · 0 评论 -
初识网络流——最大流EK算法
网络流就是一张有向图,D=(V,E,C),其中V为该图的顶点集,E为有向边,C是弧上的容量,顶点集中包括一个起点和一个终点。最大流的意思就是从起点出发到终点,在不超过容量的基础上走出一条最大流,比如运送物资,EK算法是比较基础的最大流算法,就是bfs找增广路法,至于增广路是啥我还说不清楚。最大流入门题 http://poj.org/problem?id=1273AC代码,虽然我不是很喜欢这个代码(原创 2017-08-20 11:42:24 · 466 阅读 · 0 评论 -
匈牙利算法(二分图匹配)
hdu2063匈牙利算法裸题二分图就是一个无向图G=(V,E),如果顶点集V可分割为两个人互不相交的子集V1,V2,选择这样的子集中边数最大的子集称为图的最大匹配问题,匈牙利算法就是解决二部图匹配的最常见的算法。 其核心是寻找增广路径。 最关键的就是“腾”,递归过程实现,“有机会就上,没有机会创造机会也要上”。hdu2063的代码#include<iostream>using namespac原创 2017-08-19 14:13:57 · 269 阅读 · 0 评论