图论-双连通图
文章平均质量分 58
KIJamesQi
这个作者很懒,什么都没留下…
展开
-
poj3177 Redundant Paths
思路:给出一张无向连通图,问至少需要添加几天边可以使得图中任何两个点有至少两天不同路径(边不重合),等价于至少添加几条边可以使得图为双连通分量-边连通。 显然已经处于某连通分量中的点之间必然存在两条不同路径,所以可以等效的把这个连通分量看成一个点来对待,这样就是缩点了,然后得到一棵树,此时推一下就知道还需要的边数=(叶子节点数 + 1)/ 2。 // #pragma comment(linke原创 2015-11-13 10:05:42 · 264 阅读 · 0 评论 -
uvaLive6044 Unique Path(双连通分量的应用)
题意无向图中,求有多少对节点之间的路径是唯一的且边部重合。题目中有详细解释。 分析给的几个例子很明确了。只有树结构才有路径不重合。 const int maxn = 1e4 + 10; int dfn[maxn], low[maxn], depth; bool in[maxn]; bool mark[maxn]; vector<vector<int> > G; stack<int> st; void原创 2016-06-22 20:23:46 · 398 阅读 · 0 评论 -
uva610 Street Directions(无向图桥的应用)
题意有一张道路交通图,每条边都是双向的,且连通。现在想尽量把一些多的道路改成单向的,且任意两点是可达的,输出改造后的道路图。 分析同一个双连通分量里面的边都是可以通过重定向使得相互可达,可以改成单向边。桥边就只能是双向的了。 const int maxn = 1010; int dfn[maxn], low[maxn], depth; int belong[maxn], block; stack<i原创 2016-06-22 19:50:29 · 430 阅读 · 0 评论 -
poj2112 Electricity(割点应用)
给定一张无向图,求删除某个点后图形成的连通快数目,求最大。 邻接表会TLE。。。 统计每个割点所连接的双连通数目,和全部有多少个连通快。 const int maxn = 10010; // vector<vector<int> > G; int head[maxn], pnt[maxn<<2], nxt[maxn<<2], ecnt; int dfn[maxn], low[maxn], de原创 2016-07-03 11:22:49 · 331 阅读 · 0 评论 -
hdu4612 Warm up(边双连通缩点+树的直径)
给定一张无向图,问现在添加一条边后可以使得图中还存在最少的桥边是多少。 思路:因为图是连通的,我们只需要把图缩点后形成一棵树(这里的边是原图中的桥)。然后求出这棵树的直径(经典问题),最后就是ans = bridge - Radius与0取最大。 特别注意下重边的处理。 /***************************************** Author :Crazy原创 2016-04-24 14:07:51 · 390 阅读 · 0 评论 -
hdu2460 Network
思路:题目的意思是要求在原图中加边后桥的数量,首先我们可以通过Tarjan求边双连通分量,对于边(u,v),如果满足 low[v]>dfn[u],则为桥,这样我们就可以知道图中桥的数目了。对于每一次query,可以考虑dfs树,树边肯定是桥,然后连 上u,v这条边之后,就会形成一个环,这样环内的边就不是割边了,所以只要找到u,v的LCA,把这个路径上的桥标记为否就可以了。const int ma原创 2016-06-24 16:10:01 · 687 阅读 · 0 评论 -
hdu5483Nux Walpurgis
题目意思就是求一张图上的最小生成树必须经过的边的最少条数。 因为不含有重边,而且一颗确定的生成树要换边不换值的话就是同值的边进行变换。值不同必然边的数目也不同了。。。 同值的边不能能替换的等价条件是这条边在这群同值边都成的图中是桥,结合kruskal算法。 主要看能网上的题解才搞出来的。 /***************************************** Author原创 2016-01-29 16:35:36 · 412 阅读 · 0 评论 -
lightoj1300
思路:显然是和边双连通分量有关的,所以只需要在双连通分量中找奇环(二分图染色),如果找到,这个连通分量中的点都是满足的。 // #pragma comment(linker, "/STACK:1024000000,1024000000") #include #include #include #include #include #include #include #include原创 2015-12-01 10:20:39 · 271 阅读 · 0 评论 -
lightoj1063 Ant Hills
思路:无向图中割点个数的判定。直接Tarjan抛一边就好了。 如果u是这个搜索树的根且有多个儿子节点,,,那么这个根是割点,因为去掉这个点后,他的儿子间是不能连通的。 如果u 不是根,如果它的某个儿子节点low[v] >= dfn[u]那么u也是一个割点。 // #pragma comment(linker, "/STACK:1024000000,1024000000") #include原创 2015-11-30 17:46:19 · 336 阅读 · 0 评论 -
hdu4005The war
思路: 无向图求连通分量。我们首先应该知道,因为加入的边未知,所以我们所求的最小金额就是无论加入的边在图中哪里,我们都可以删除一条边来使它不连通。so我们首先对图求解连通分量,然后缩点,形成一棵树。这时候,我们可以想到,在加入一条未知的边之后会形成一个环,显然最小值的边不是我们的答案,因为这条边有可能就在这个环中,这时候我们就删除不了边了(其他边的值都比这个值大)。 我们仔细想想可以发原创 2015-11-13 17:03:44 · 365 阅读 · 0 评论 -
hdu5409 CRB and Graph(bcc)
题目中critical的定义:对于边e<u,v>e<u, v>成为critical边的充要条件是删除这条边之后u、v不连通了,由于这图是无向图,所以显然是桥边。然后针对桥边构造一条边,使得删除边e<u,v>e<u,v>之后,u、v还是连通的。要求u v,u⪇v,u \ v,u \lneq v,u尽量的大,其次v尽量的小。分析: 1.e<u,v>e<u,v>不是桥边,那么就是0 0. 2.e原创 2016-07-18 22:38:00 · 495 阅读 · 0 评论