
图论
文章平均质量分 72
84970000
算法工程师
展开
-
POJ 2570
我在Codeforces上做过一道类似的题目,当时是纯DFS暴力解决的。做这题时以为还是一样,结果TLE了。然后用floyd来做,但是我是用三维数组的方式的conj[i][j][k]代表i和j直接边都是k是否为一条通路。结果还是TLE,看其他人的题解,发现竟然是二进制。conj[i][j]代表i和j之间的状态,状态中二进制的第k位为1的话代表i和j之间存在一条所有边都是k的通路。其实我一开始的做法原创 2015-04-06 23:19:08 · 702 阅读 · 0 评论 -
HDU 3394 Railway(点双连通分量的应用)
题意:给定一个无向图,分别求出不在任何环中的边的数量和同时在两个或以上的环中的边的数量。解法:桥上的边就是不在任何环中的。而如果一个点双连通分量中边的数量比点的数量要多,那么该双连通分量的所有边都同时在两个或以上的环中(这个可以想象一下,在一个简单环中多加一条端点不同的边,这样简单环就会被分割成两个小的简单环,任何一条在大的环中的边都会同时处于一个其中一个小的环中)。在tarjan算法中,原创 2015-05-02 22:22:26 · 760 阅读 · 0 评论 -
POJ 1523 SPF (割顶 点双连通分量)
题意就是求出在一个图上去除一个点之后,那个图会变成多少个子连通图。显然我们要求出割顶。我的代码套用了刘汝佳的大白书的tarjan算法,用一个数组cnt[]记录一个点是多少个点双连通分量的割顶。当发现一个点是割顶的时候,就cnt[i]++。最后,如果一个点是一棵dfs树的树根时,就输出cnt[i],否则就输出cnt[i]+1(因为那个点有父亲,而cnt数组记录的相当于是该点的儿子个数)。#i原创 2015-05-16 20:13:12 · 494 阅读 · 0 评论 -
HDU 3488 HDU3435 HDU 1853 (最小费用流或者最大完美匹配)
这三道题都基本差不多:给定一个图,让每一个点都在一个环中,并且使得这些环的权值之和最小。这类型的题目有至少两种做法:最小费用流或者最大完美匹配。但是具体选择哪一种要结合具体的数据量范围。最大完美匹配的时间复杂度是O(n^3),最小费用流的时间复杂度是O(F*E*log*V),F是做最短路的次数。最小费用流的做法:建图方式是,将一个点拆成两个,编号为i,i+n,对于一条边(u,v,val),原创 2015-09-18 16:32:49 · 742 阅读 · 1 评论