图论
文章平均质量分 66
缘
这个作者很懒,什么都没留下…
展开
-
Dijkstra算法
Dijkstra算法(单源最短路径) 单源最短路径问题,即在图中求出给定顶点到其它任一顶点的最短路径。在弄清楚如何求算单源最短路径问题之前,必须弄清楚最短路径的最优子结构性质。一.最短路径的最优子结构性质 该性质描述为:如果P(i,j)={Vi....Vk..Vs...Vj}是从顶点i到j的最短路径,k和s是这条路径上的一个中间顶点,那么P(k,s)必定是从k到s的最短路转载 2013-01-08 11:24:30 · 439 阅读 · 0 评论 -
强连通分量+二分匹配
#include # include# include# include# includeusing namespace std;const int N = 5005;vectors[N], s1[N];int n, m, stop, Bcnt, dindex;int DFN[N], Low[N], stap[N], belong[N], link[N], visit[N];原创 2014-05-20 18:04:11 · 520 阅读 · 0 评论 -
二分匹配的补充
二分匹配月老的难题:输入:每组测试数据的第一行有两个整数n,K,其中男孩的人数与女孩的人数都是n。(n随后的K行,每行有两个整数i,j表示第i个男孩与第j个女孩有可能结成幸福的家庭。(1输出:输出最多可能促成的幸福家庭数量[cpp] view plaincopy 1 # include 2 # include 3 # include 4 # i翻译 2014-05-20 17:09:57 · 565 阅读 · 0 评论 -
二分匹配的讲解
二分图:二分图又称二部图,是图论中的一种特殊模型。设G=(V,E)是一个无向图,如果顶点V可以分割为两个互不相交的子集(A,B),并且图中的每条边(i,j)所关联的两个顶点i和j分别属于这两个不同的顶点集(i in A, j in B), 则称图G是二分图。e.g.匹配:给定一个二分图,在G的一个子图G’中,如果G’的边集中的任意两条边都不依附于同一个顶点,则称G’的边集为转载 2014-05-19 13:00:12 · 466 阅读 · 0 评论 -
kruskal模板
#include#include#includeint n,m,set[124];struct val{ int x,y,v;}e[10010];int find(int x){ return set[x]==x?x:set[x]=find(set[x]);}int kruskal(){ int sum=0; for(int i=1;i<=m;i原创 2013-04-12 17:09:50 · 538 阅读 · 0 评论 -
用list存图+二分匹配
nyoj月老的难题 # include# include# includeusing namespace std;list s[505];int vis[505], link[505];bool get_num(int i){ list::iterator t; //迭代器 for( t = s[i].begin(); t != s[i].end原创 2013-04-17 11:07:12 · 497 阅读 · 0 评论 -
用vector存图 + 二分匹配
nyoj 239 月老的难题 # include# include# include# includeusing namespace std;vector s[505];int vis[505], link[505];bool get_num(int i){ for(int j = 0; j < s[i].size(); j++) //指向第一个元素和最后一原创 2013-04-17 11:05:24 · 685 阅读 · 0 评论 -
线段树
#include# includestruct tree{ int l; int r; int sum;}s[4*50005]; //注意开4被int a[50005];void build(int l,int r,int cur) //建树{ s[cur].l=l; s[cur].r=r; if(l==r) {原创 2013-04-12 09:21:58 · 496 阅读 · 0 评论 -
二叉树的遍历
# includeusing namespace std;struct Tree{ char chr; Tree *l,*r;};Tree *root;int sign,Count;void Init(struct Tree *&t)//{ char a; if(t==NULL) { t=new Tree; c原创 2013-04-12 09:14:27 · 493 阅读 · 0 评论 -
拓扑排序
The Problem袁源除了喜欢吃苹果外,他在有空的时候还喜欢把苹果按重量由大到小排成一列.当然,这是为了方便以后从最大的开始吃,这样他就能永远都吃到最大的!但是他只有一部没有砝码的天平,于是他每次只能比较两个苹果的重量。现在就要请你帮忙,如果每次只给出两个苹果的重量关系,怎样才能把这些苹果都排列好呢?输入本题包括多组测试数据.每组测试数据的第一行为一个整数n(1<=n<=20),代转载 2013-01-08 11:32:13 · 320 阅读 · 0 评论 -
拓扑排序
拓扑排序一.定义 对一个有向无环图(Directed Acyclic Graph简称DAG)G进行拓扑排序,是将G中所有顶点排成一个线性序列,使得图中任意一对顶点u和v,若 ∈E(G),则u在线性序列中出现在v之前。 通常,这样的线性序列称为满足拓扑次序(Topological Order)的序列,简称拓扑序列。 注意: 1)只有有向无环图才存在拓扑序列;转载 2013-01-08 11:31:00 · 307 阅读 · 0 评论 -
图的遍历
图的遍历 图的遍历有两种遍历方式:深度优先遍历(depth-first search)和广度优先遍历(breadth-first search)。1.深度优先遍历 基本思想:首先从图中某个顶点v0出发,访问此顶点,然后依次从v0相邻的顶点出发深度优先遍历,直至图中所有与v0路径相通的顶点都被访问了;若此时尚有顶点未被访问,则从中选一个顶点作为起始点,重复上述过程,直到所有转载 2013-01-08 11:29:24 · 310 阅读 · 0 评论 -
Floyd算法
Floyd算法(各对顶点之间的最短距离) 在上篇文章中谈论到了如何求算单源最短路径,因此要想求各对顶点之间的距离,只需循环求算n次即可。还有另外一种方法来求算各对顶点之间的最短距离,就是Floyd算法,由于其算法过程比Dijkstra更容易理解,并且代码更简洁,因此当求算各对顶点之间的最短距离常采用Floyd算法。一.Floyd算法 假设从i到j的最短路径上要经过若干转载 2013-01-08 11:27:11 · 407 阅读 · 0 评论 -
完备匹配下的最大权匹配
# include # include# include# include# include# includeusing namespace std;const int N = 205;const int inf = -1e9;int mapp[N][N], lx[N], ly[N];int visitx[N], visity[N], link[N];int n, m;b原创 2014-05-20 20:27:50 · 867 阅读 · 0 评论