双DFS方法就是正dfs扫一遍,然后将边反向dfs扫一遍。《挑战程序设计》上有说明。 双dfs代码: 1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 #include <vector> 5 6 using namesp
分类:
其他好文 时间:
2016-03-06 19:02:49
阅读次数:
162
题意:给一个n个顶点m条弧的简单有向图(无环无重边),求最多能够加入多少条弧使得加入后的有向图仍为简单有向图且不是一个强连通图。假设给的简单有向图本来就是强连通图,那么输出-1. 分析: 1.用tarjan算法求出强连通分量的个数,假设个数为1,那么输出-1,结束,否则运行2 2.如果将一些强连通分
分类:
其他好文 时间:
2016-03-02 23:24:22
阅读次数:
199
UvaLive4287 roving Equivalences 题意:给n个定理,以及m个关系,即u定理可以推出v定理。问至少还需要加多少个条件,才能是定理两两互推。 思路:Tarjan缩点。然后变成一个DAG。ans1记录入度为0的联通块,ans2记录出度为0的联通块。输出较大值即可。注意如果点数
分类:
其他好文 时间:
2016-02-27 06:19:11
阅读次数:
230
Popular Cows Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 23445 Accepted: 9605 Description Every cow's dream is to become the most popul
分类:
其他好文 时间:
2016-02-25 22:42:18
阅读次数:
297
只有一周了QAQ 2.21 CF 629 E Famil Door and Roads 其实Tarjan的时候搞一搞,就O(n+m)了吖。 1 #include <iostream> 2 #include <cstdio> 3 #include <vector> 4 using namespace
分类:
其他好文 时间:
2016-02-21 18:35:16
阅读次数:
127
【题意】 给出一棵树和多组查询,求以每个节点为LCA的查询数有多少? 【错误点】 ①读入的时候,注意它的空格是随意的呀!一开始不知道怎么弄,后来看了DISCUSS区大神的话: 询问部分输入: scanf("%d",&m); for(int i=0;i<m;i++){ scanf(" (%d %d)"
分类:
其他好文 时间:
2016-02-18 00:00:27
阅读次数:
418
学习博客: http://noalgo.info/476.html 讲的很清楚! 对于一颗树,dfs遍历时,先向下遍历,并且用并查集维护当前节点和父节点的集合。这样如果关于当前节点(A)的关联节点(B)(及要求的最近祖先的另一个点)之前被访问过,那么 B可定已经属于一个集合,先前对于访问过的点,已经
分类:
编程语言 时间:
2016-02-11 00:30:12
阅读次数:
260
这题做了几个小时,基本思路肯定是求两点路径中的割点数目,思路是tarjan缩点,然后以割点和连通块作为新节点见图。转化为lca求解。结合点——双连通分量与LCA。 1 /* 3686 */ 2 #include <iostream> 3 #include <sstream> 4 #include <
分类:
其他好文 时间:
2016-02-06 01:41:18
阅读次数:
291
不早了,先上个模板,做些题再来分析一下; 强连通Tarjan算法+前向星 模板如下: const int MAXN=110; const int MAXM=10010; struct edge { int to,next; }; edge E[MAXN]; int head[MAXN],Ecou; ...
分类:
编程语言 时间:
2016-02-04 00:19:36
阅读次数:
198