给一个图,问至少添加多少条有向边可以使图变成强连通的。
原图是有环的,缩点建图,在该DAG图上我们可以发现,要使该图变成强连通图必须连成环
而添加最少的边连成环,就是把DAG图上入度为0和出度为0的点连上,那么其他的点就都可以互相到达了
所以答案就是max(入度为0的点,出度为0的点)
#include
#include
#include
#include
#include...
分类:
其他好文 时间:
2014-07-02 10:52:24
阅读次数:
208
给定图,求把至少把图拆成几个集合能够使集合内的点没有直接或间接关系。
首先由题意可得图中可能含环,而环里面的点肯定是要拆开的。
缩点建图得DAG图,可以想象一下。。把图从入度为零的点向下展开,位于同一层的点放在一个集合是没有关系的,
那么题目所求的问题就转化成求图中最长路的问题了。
接下来就跟
这题 一模一样了。。
#include
#include
#include...
分类:
其他好文 时间:
2014-07-02 09:09:45
阅读次数:
183
首先tarjan缩点,重新建图后,每个点的权值就是该点包含点的个数。
然后从入度为0的点开始记忆化搜索,dp[i]表示以i为根最多包含多少点。
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define inf 0x3f3f3f3f
#define e...
分类:
其他好文 时间:
2014-07-02 08:37:48
阅读次数:
211
给出m条a年龄大于等于b的信息,要求可以比较的两个人不能放在同一组,问最少能分成几组。
由于是大于等于,所以原图可能构成强连通分量,意思就是有很多人年龄相同(想想也该知道,总共10w个人,肯定有很多人年龄重复= =!)将原图缩点后,对新图记忆化搜索求最长路。
如果不缩点,会RE。。。
#include
#include
#include
#include
#include
using na...
分类:
其他好文 时间:
2014-07-01 10:47:45
阅读次数:
269
题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=3605
本来打算昨天写两道题的,结果这个题卡住了,最后才发现是最后的判断条件出错了,判断满流的条件应该是与n的比较,竟然写成与所有星球总容量的比较了。(最近大脑短路。。)
这题也不是完全自己想的,没想到缩点这一技巧,由于n的数据范围太大,普通的建图方法会超时超内存,需要缩点,因为对于每个点来说,一共...
分类:
其他好文 时间:
2014-07-01 07:53:27
阅读次数:
235
题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=3605
本来打算昨天写两道题的,结果这个题卡住了,最后才发现是最后的判断条件出错了,判断满流的条件应该是与n的比较,竟然写成与所有星球总容量的比较了。(最近大脑短路。。)
这题也不是完全自己想的,没想到缩点这一技巧,由于n的数据范围太大,普通的建图方法会超时超内存,需要缩点,因为对于每个点来说,一共...
分类:
其他好文 时间:
2014-06-30 16:22:40
阅读次数:
222
给出n个命题,m个推导,问最少增加多少条推导,可以使所有命题都能等价(两两都能互推)
既给出有向图,最少加多少边,使得原图变成强连通。
首先强连通缩点,对于新图,每个点都至少要有一条出去的边和一条进来的边(这样才能保证它能到任意点和任意点都能到它)
所以求出新图中入度为0的个数,和出度为0的个数,添加的边就是从出度为0的指向入度为0的。这样还会有一点剩余,剩余的就乱连就行了。
所以只要求出...
分类:
其他好文 时间:
2014-06-30 08:08:00
阅读次数:
163
首先双连通缩点建立新图(顺带求原图的总的桥数,其实由于原图是一个强连通图,所以桥就等于缩点后的边)
此时得到的图类似树结构,对于新图求一次直径,也就是最长链。
我们新建的边就一定是连接这条最长链的首尾,这样就将原图的桥减少了直径个。
#include
#include
#include
#include
#include
#include
using namespace std;
#...
分类:
其他好文 时间:
2014-06-28 07:18:36
阅读次数:
278
题目要求一个最大的弱联通图。
首先对于原图进行强连通缩点,得到新图,这个新图呈链状,类似树结构。
对新图进行记忆化dp,求一条权值最长的链,每个点的权值就是当前强连通分量点的个数。
/*
Tarjan算法求有向图的强连通分量set记录了强连通分量
Col记录了强连通分量的个数。
*/
#include
#include
#include
#include
#include
usin...
分类:
其他好文 时间:
2014-06-27 10:12:12
阅读次数:
275
用tarjan进行缩点。
然后用dfs求最长路。水体。。。
#include
#include
#include
#include
#include
#include
#include
using namespace std;
#define maxn 110000
vectorold[maxn];
vectorvec[maxn];
int dnf[maxn],low[maxn],instac...
分类:
其他好文 时间:
2014-06-22 11:51:01
阅读次数:
203