var
v,f,yes:array[1..1000]of boolean;
dfn,low:array[1..1000]of integer;
a:array[0..1000,0..1000]of integer;
b:array [0..1000] of integer;
i,j,n,m,x,y,deep,d:integer;
stack,ln:array[1..1000]of integer;
function min(x,y:longint):integer; begin
if x>y then exit(y)
else exit(x);
end;
procedure print(x:integer);
var i:longint; begin
i:=0;fillchar(b,sizeof(b),0);
while stack[deep]<>x do
begin
inc(i);
b[i]:=stack[deep];
f[stack[deep]]:=false;
dec(deep);
end;
f[stack[deep]]:=false;
dec(deep); inc(i);b[i]:=x;
if i>1 then for x:=1 to i do yes[b[x]]:=true;
end;
procedure dfs(x:integer);
var
i:integer;
begin
inc(d); //时间
dfn[x]:=d; //规则1
low[x]:=d;
inc(deep); //栈中元素个数
stack[deep]:=x; //规则2
f[x]:=true;
for i:=1 to a[x,0] do
if dfn[a[x,i]]=0 then
begin
dfs(a[x,i]);
low[x]:=min(low[a[x,i]],low[x]); //规则3
end
else if f[a[x,i]] then
low[x]:=min(low[x],dfn[a[x,i]]);
//规则4 dfn or low 有影响吗?
if dfn[x]=low[x] then //规则5
print(x);
end;
begin
assign(input,'messagez.in'); reset(input);
assign(output,'messagez.out'); rewrite(output);
readln(n,m);
fillchar(a,sizeof(a),0);
fillchar(yes,sizeof(yes),false);
fillchar(dfn,sizeof(dfn),0);
for i:=1 to m do
begin
readln(x,y);
inc(a[x,0]);
a[x,a[x,0]]:=y;
end;
for i:=1 to n do
if dfn[i]=0 then dfs(i);
for i:=1 to n do
if yes[i] then writeln('T') else writeln('F');
close(input);close(output);
end.
分享到:
相关推荐
### 有向图强联通分量求解代码详解 #### 引言 在图论中,有向图的强连通性是一个重要的概念。如果一个有向图中的任意两个顶点都相互可达,则称该图是强连通的。强连通分量是指在一个有向图中最大的、自身内部任何两...
)图作为输入,并以拓扑顺序返回其强连通分量作为输出 循环依赖 在各种情况下,依赖关系可能是循环的,并且必须同时执行一组相互依赖的操作。同时执行成本高昂的情况并不少见。使用 Tarjan 算法,可以确定执行相互...
压缩包中的"强联通分量"文件可能包含具体的代码实现、实例解析或是更深入的理论探讨。 总的来说,理解和掌握强连通分量的概念及其算法对于理解复杂网络的结构和行为至关重要,同时在各种IT应用中都有广泛的应用价值...
非强连通的有向图会有多个强连通分量,每个分量内部的顶点两两可达,但分量之间可能无法互相到达。 4. **生成树**:生成树是从图中选择一部分边,使得这些边连接起所有的顶点,且不形成环路的子图。根据搜索策略的...
2. **图的强联通分量**:在图论中,强联通分量是指图中任意两个顶点都互相可达的子图。这个问题通常涉及深度优先搜索(DFS)或并查集数据结构。解答链接:[图的强联通分量答案]...
无向图的强连通分量(1).cpp //这个是内网比赛的代码,用到了无向图的双连通分量 ,gabow部分是求双联通的
描述中提到了强联通分支和联通分支,强联通分支是指图中任意两个节点都互相可达的有向图子图,而联通分支是无向图中的概念,但在有向图中,每个联通分支可以看作一个强联通分量的集合。可以使用深度优先搜索(DFS)或...
4. Tournament问题:这个问题关注的是竞赛图的强联通分量问题。竞赛图是一个有向图,对于任意两点a和b,要么存在从a到b的有向边,要么存在从b到a的有向边。问题要求计算出所有可能的竞赛图中强联通分量的数量和。...
**定义**:在一个有向图中,若两个顶点之间存在双向可达路径,则这两个顶点属于同一个强联通分量。 **算法**: - Tarjan算法是一种高效地找到图中所有强联通分量的方法。 - 基于DFS实现。 ##### 6. 并查集 **定义*...
### 强联通分支 Gabow算法解析 #### 引言与背景 在计算机科学与图论领域,图的连通性分析是一项基础而重要的任务。其中,强连通分量(Strongly Connected Components, SCCs)与双连通分量(Biconnected Components...
- 有向图强联通分量Kosaraju算法和Tarjan算法:用于求解有向图中的强连通分量,即在有向图中找到最大的强连通子图。 - 2-sat问题:是布尔可满足性问题的一种形式,用于求解一组变量满足一组二元逻辑公式的问题。 ...
可以根据强联通缩点的结果来进行相应的调整,比如重新设计表之间的关联关系,或者通过引入新的实体来打破环,确保数据的一致性和查询效率。 ### 冗余数据处理 #### 冗余数据的危害 1. **存储空间浪费**:冗余数据...
Tarjan割点割边,强联通分量讲解
5. **受欢迎的牛**(BZOJ1051):强联通分量是图论中的概念,用于识别图中的强连通子图。 6. **部落划分**(BZOJ1821):结合二分查找和最小生成树,可能需要解决将部落划分为若干互相无冲突的小部落的问题。 7. *...
求有向图强联通分量,采用gabow算法实现
4.最小生成树 5.拓扑排序 6.差分约束 7.倍增求LCA 8.有向图的强联通分量 9.无向图的双联通分量 1.树状数组 2.线段树 3.树链剖分 4.平衡树
要求采用邻接矩阵作为无向图的存储结构,邻接表作为有向图的存储结构,完成无向图和有向图的建立,并对建立好的图进行深度和广度优先遍历。具体实现要求: 1. 通过键盘输入图的顶点...3. 统计两个图的连通分量的个数。
强联通分量 无向图求桥 无向图求割点 二分图匹配 匈牙利算法 Hopcroft-Karp算法 二分图最优匹配 KM 算法 最小树形图 朱刘算法 最大密度子图 01分数规划 && 网络流 无向图全局最小割 度数限制的最小生成树 最小直径...
为了满足棒材计数在工业生产的实际应用需求,提出了一种基于提取连通分量的算法,以实现目标棒材计数区域的自动定位,并对定位的区域采用提取连通分量算法实现对轮廓的标注,最后提出了一种区域轮廓周长的校正方法,...
本文将深入探讨如何通过深度优先遍历(Depth First Search, DFS)的方法来处理一个以邻接表形式表示的无向图,并具体实现输出连通分量的个数及其对应的顶点集合。 ### 一、基础知识 #### 1. 图的基本概念 - **图*...