随笔分类 -  graph

摘要:最大独立集的定义 二分图的最大独立集是:一个最大的点的集合,该集合内的任意两点没有边相连。 二分图最大团的定义是:一个最大的点的集合,该集合内的任意两点都有边相连。 从定义可以看出"二分图的最大独立集"和"二分图补图的最大团"是一样的。 最大独立集的求法 二分图的最大独立集 = 二分图顶点数 - 二 阅读全文
posted @ 2016-04-21 13:56 justPassBy 阅读(2944) 评论(1) 推荐(0)
摘要:DAG的最小路径覆盖 定义:在一个有向图中,找出最少的路径,使得这些路径经过了所有的点。 最小路径覆盖分为最小不相交路径覆盖和最小可相交路径覆盖。 最小不相交路径覆盖:每一条路径经过的顶点各不相同。如图,其最小路径覆盖数为3。即1->3>4,2,5。 最小可相交路径覆盖:每一条路径经过的顶点可以相同 阅读全文
posted @ 2016-04-08 20:50 justPassBy 阅读(15445) 评论(2) 推荐(9)
摘要:看着这个博客然后敲了hdu1532这个入门题,算是对最大流有点理解了 1 #include 2 #include 3 #include 4 using namespace std; 5 const int INF = 1 q;12 for(int i=1;i0 && pre[i]==-... 阅读全文
posted @ 2015-11-30 21:02 justPassBy 阅读(315) 评论(0) 推荐(0)
摘要:给我们一个有向图,找出长度为3的环,如果有的话,输出环上的三个点,如果没有,输出-1因为只有三个点,所以可以暴力, 枚举两条边,判断第三条是不是存在即可。 fa -> u, u -> i, 判断g[i][fa]==1? 1 #include 2 #include 3 #include 4 #... 阅读全文
posted @ 2015-09-17 17:46 justPassBy 阅读(3393) 评论(1) 推荐(0)
摘要:找人去炸边,炸完之后分成两个连通块(炸割桥)每条边上有w个守卫,派去炸桥的人不能比守卫少所以,如果原本不连通,那么输出0如果没有桥,输出-1如果有桥没有守卫,那么是输出1,而不是0(trick) 1 #pragma warning(disable:4996) 2 #pragma comment(li... 阅读全文
posted @ 2015-09-10 17:09 justPassBy 阅读(260) 评论(0) 推荐(0)
摘要:连边的最后肯定是两个集合x,yx集合的每个元素,到y集合中的每个元素都是单向的边x集合,和y集合都是完全图设a为x集合的点的个数, b为y集合的那么答案就是 a * b + a*(a-1) + b*(b-1) - mn*n-a*b-n-m , 所以a*b尽量小, 即a和b的差值尽量大缩点之后的点入度... 阅读全文
posted @ 2015-09-10 16:38 justPassBy 阅读(336) 评论(0) 推荐(0)
摘要:给我们一个图,然后有q次加边的操作,问每次加完边之后有多少个桥存在首先用dfs求出所有的桥,然后dfs的过程中生成了一棵dfs树,该树有的边是桥,有的不是,用bridge[v] = true , 表示v与fa[v]的连边是桥当加入一个边u,v后, u,v,lca(u,v)上的边从割边变成了非割边。至... 阅读全文
posted @ 2015-09-09 15:26 justPassBy 阅读(287) 评论(0) 推荐(0)
摘要:给我们一个有向图,有两个问题1、最少要给多少个点发消息,才能使得所有的点都收到消息(消息可以随边传递)2、最少需要多少条边才能使得图变成强连通图对于一个强连通分量,可以当做一个点来考虑,所以我们可以缩点,然后得到DAG图,那么对于第一个问,即是入度为0的点有多少个,因为入度为0的点无法收到消息。对于... 阅读全文
posted @ 2015-09-09 15:19 justPassBy 阅读(1806) 评论(0) 推荐(0)
摘要:生成树专题地址uvalive3887给定一个带权的无向图,求得一棵最小生成树,是的树中的最大边权-最小边权的差值最小分析:当确定一个最小边时(其他的边的权值都比他大),那么之后按照kruskal算法得到的最小生成树,此时得到的最小生成树的最大权值也肯定是最小的,因为是kruskal是按照贪心来选边的... 阅读全文
posted @ 2015-07-30 09:07 justPassBy 阅读(244) 评论(0) 推荐(0)
摘要:回路性质:如果C是图G上的任意回路, e是回路上权值最大的边, 那么生成树肯定不包含e, 因为选其他的边,明显更优增量最小生树, 有m条边,每次加入一条边,如果能形成树,求出最小的生成树,思路: 如果暴力求解,那么要求m遍最小生成树, 时间复杂度是 m*m*logm 那么根据回路性质, 一棵树加... 阅读全文
posted @ 2015-07-29 20:07 justPassBy 阅读(254) 评论(0) 推荐(0)
摘要:uvaLive5713修建道路使得n个点任意两点之间都可以连通,每个点有都有一定的人口,现在可以免费修一条道路,A是免费修的道路两端结点的人口之和, B的其它不是免费修道路的长度的总和要求的是A/B的最短值。B其实就是最小生成树删除一条边只有的权值之和B。 只要我们知道生成树上任意两点之间的最长边,... 阅读全文
posted @ 2015-07-27 20:11 justPassBy 阅读(212) 评论(0) 推荐(0)
摘要:将无向图变为点-双连通的图 定义:点-双连通指的是任意两个之间存在至少两条点不重复的路径 分为两种情况, 一种是连通图,一种是非连通图 ①连通图 首先,找出图中的所有点-双连通分量,然后将该分支缩成一个点, 因为双连通分量内部肯定不用考虑的。 只需要考虑双连通分量与外部的其它结点... 阅读全文
posted @ 2015-07-26 17:27 justPassBy 阅读(1768) 评论(0) 推荐(1)
摘要:给定ai,bi, ci 表示区间[ai,bi]内至少有ci个点, 要求对于所有给定的ai,bi,ci, 至少多少个点才能满足题目的条件重做这一题学到的一点是, 可以设变量来表示一些东西,然后才能找出约束的条件, s[i]表示区间0到i内有多少个点, 那么s[bi] - s[ai-1] >= ci 就... 阅读全文
posted @ 2015-07-15 09:00 justPassBy 阅读(192) 评论(0) 推荐(0)
摘要:给我们n座房子,房子的高度各不相同, 从最低的房子开始, 每次跳到更高的房子, 跳n-1次最能跳到最高的房子了,但是每次跳跃的距离不能超过d将这些房子在一维的方向上重新摆放(但是保持输入时的相对位置不变) , 使得最矮的房子和最高的房子水平距离最大将房子的坐标设为xi, n个变量, 和2(n-1)个... 阅读全文
posted @ 2015-07-14 19:47 justPassBy 阅读(366) 评论(0) 推荐(0)
摘要:如果,上面的图,如果用dij算法,那么dist[4] = 4, 是得不到正确的结果的, 这个因为dist[3]先被确定是最小,然后用来更新dist[4]但是存在负权,使得dist[3]更小,但是我们已经把结点3标记为不可用了(vis[3] = true), 所以存在错误如何使得使得结点3可用呢? 我... 阅读全文
posted @ 2015-07-14 19:34 justPassBy 阅读(275) 评论(0) 推荐(0)
摘要:hnu1066给我们一张图,问我们摧毁边使得s和t不连通有多少种方案, 方案与方案之间不能存在相同的摧毁目标。这是一个神奇的题目。这题可以转为求s与t的最短路,为什么呢?因为方案与方案之间不能存在相同的催婚目标。那么最短路上的边肯定要被摧毁,才能使得s和t不连通。那么只要一个方案摧毁最短路上的一条边... 阅读全文
posted @ 2015-05-22 09:29 justPassBy 阅读(172) 评论(0) 推荐(0)
摘要:poj1986给我们一棵树,求任意两个点之间的距离dist[a->b] = dist[a] +dist[b] - 2*lca(a,b)要建双向边,数据可能不是严格意义上的树 1 #include 2 #include 3 #include 4 #include 5 #include... 阅读全文
posted @ 2015-05-19 19:39 justPassBy 阅读(358) 评论(0) 推荐(0)
摘要:在有根树中,两个结点u和v的公共祖先中距离最近的那个称为最近公共祖先(lowest common ancestor)、如图lca(4,7) = 2, lca(6,8)=1, lca(5,8)=5记点v到根的深度为depth[v], 那么如果w是点u和v的公共祖先的话, 让u向上走depth[u] -... 阅读全文
posted @ 2015-05-18 22:19 justPassBy 阅读(330) 评论(0) 推荐(0)
摘要:poj1364设s[i] 表示a1 + a2 + ... + a(i-1)的和给我们n个点,m条约束如果是a b gt c 那么表示 s[a+b+1] - s[a] > c ---> s[a] -s[a+b+1] s[a] s[a+b+1] - s[a] s[a+b+1] 2 #inc... 阅读全文
posted @ 2015-05-18 16:27 justPassBy 阅读(410) 评论(0) 推荐(0)
摘要:对于上面那张图,是可以用dij算法求解出正确答案,但那只是巧合而已。我们再看看下面这张图。dist[4] 是不会被正确计算的。 因为dij算法认为从队列出来的点,(假设为u)肯定是已经求出最短路的点,标记点u。并用点u更新其它点。所以如果存在负权使得这个点的权值更小,那么会更新dist[u], 但是... 阅读全文
posted @ 2015-05-18 11:08 justPassBy 阅读(951) 评论(0) 推荐(0)