
图论
文章平均质量分 78
发奋屠强
这个作者很懒,什么都没留下…
展开
-
割点,桥模板
求割点: 割点:若删掉某点后,原连通图分裂为多个子图,则称该点为割点 若low[v]>=pre[u],则u为割点。 这说明v的子孙不能够通过其他边到达u的祖先,这样去掉u之后,图必然分裂为两个子图。这样我们处理点u时,首先递归u的子节点v,然后从v回溯至u后,如果发现上述不等式成立,则找到了一个割点u,并且u和v的子树构成一个块。 求割边(桥) 割边(桥):删掉它之后,图原创 2013-05-07 21:51:12 · 953 阅读 · 0 评论 -
tarjan求强连通分量模板
在有向图中,如果两个顶点间至少存在一条路径,称两个顶点强连通。 如果有向图G的每两个顶点都强连通,称G是一个强连通图。 非强连通图有向图的极大强连通子图,称为强连通分量。 而用tarjan算法可以起求出各个强连通分量,然后再把强连通分量缩成一个点,非强连通图就被转换成一个 DAG,去多问题都是在此基础上求解。 以下是模板: #include #include #原创 2013-05-07 21:59:42 · 1084 阅读 · 0 评论 -
LCA和RMQ模板
一、最近公共祖先(Least Common Ancestors) 对于有根树T的两个结点u、v,最近公共祖先LCA(T,u,v)表示一个结点x,满足x是u、v的祖先且x的深度尽可能大。另一种理解方式是把T理解为一个无向无环图,而LCA(T,u,v)即u到v的最短路上深度最小的点。 这里给出一个LCA的例子: 例一 对于T= V={1,2,3,4,5} E={(1,2),(1,3原创 2013-05-12 22:46:14 · 1191 阅读 · 0 评论 -
POJ 1895 Bring Them There 分层构图 求最大流 并输出路径
这个题在输出路径上上纠结了好久,直到我遇到了下面这个代码,,堪称完美! Code: //神一样的思想,神一样的代码,我佩服的五体投地!! //题目给出五个正整数n,m,k,s,t。n表示n星球,m表示m个双向隧道, //k,s,t表示要把k个电脑从s星球运到t星球,双向道只能单行,走一条 //道用时一天,求最短时间,并输出运输方案。 //原创 2013-09-06 10:12:02 · 1427 阅读 · 0 评论 -
HDU 1733 [Escape] 分层图网络流+枚举时间
题目大意:给定一个矩阵,'.'表示空位,'X'表示人,'#'表示墙,'@'表示门,每个位置至多只能站一个人,人不能穿越墙,人能从门中出去。每个人每分钟只能上下左右移动一步,问最少需要多少时间让所有的人出去。 思路: (1):把每个点按照天数拆成d个点。 (2):添加源汇点S和T。 (3):源点向第0天地图上人所在位置的点连一天容量为1的边。 (4):枚举时间Ti (5):每次枚举只原创 2013-09-05 17:05:27 · 1370 阅读 · 0 评论 -
HDU 4679 Terrorist’s destroy (拆边+树的直径)
给一棵树,每条边上都有一个权值,去掉树上任意一条边之后,分成两个子树,两个子树的最长路与这条边上的权值相乘,的到一个乘积。问去掉那一条边可以使这个乘积最小。 首先找到树上的最长路,那么删边的时候有两种情况: 1. 这条边不是最长路上的边 2. 这条边是最长路上的边 对于第一种情况,很容易计算出乘积。 对于第二种情况,只需要计算出被分成的两个子树里面的最长路径长度即可,这个可以预处理一下。原创 2013-09-20 13:58:15 · 1180 阅读 · 0 评论 -
【HDU3721】枚举+最长路
题意:给你一颗n个节点n-1条边的树,每条边都有一个权值,现在让你任意移动一条边然后把这条边连接到任意两个点上,最后问你怎样移动才能使树上相距最远的两个点距离最小。 思路:先求出树的最长路,然后枚举移动最长路上的所有边,移走这条边后,原树必定分为不连接的两颗子树,分别求这两颗子树的最长路,然后分别找到两颗子树最长路上靠近中点的点,那么最长路有三种情况:假设这条边为 u -> v 1.u的原创 2013-09-20 14:14:55 · 1578 阅读 · 0 评论 -
LCA 多次询问 解法总结
N个节点,M次询问,求两点间的最近公共祖先 一、原创 2014-10-28 15:13:27 · 1322 阅读 · 0 评论