`

【强联通分量】

 
阅读更多


     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 的强连通分量算法的Python实现

    )图作为输入,并以拓扑顺序返回其强连通分量作为输出 循环依赖 在各种情况下,依赖关系可能是循环的,并且必须同时执行一组相互依赖的操作。同时执行成本高昂的情况并不少见。使用 Tarjan 算法,可以确定执行相互...

    强连通全解

    压缩包中的"强联通分量"文件可能包含具体的代码实现、实例解析或是更深入的理论探讨。 总的来说,理解和掌握强连通分量的概念及其算法对于理解复杂网络的结构和行为至关重要,同时在各种IT应用中都有广泛的应用价值...

    数据结构与算法 第6章 生成树和最小生成树

    非强连通的有向图会有多个强连通分量,每个分量内部的顶点两两可达,但分量之间可能无法互相到达。 4. **生成树**:生成树是从图中选择一部分边,使得这些边连接起所有的顶点,且不形成环路的子图。根据搜索策略的...

    今日头条2020年面试题目分享.docx

    2. **图的强联通分量**:在图论中,强联通分量是指图中任意两个顶点都互相可达的子图。这个问题通常涉及深度优先搜索(DFS)或并查集数据结构。解答链接:[图的强联通分量答案]...

    无向图的强连通分量.cpp

    无向图的强连通分量(1).cpp //这个是内网比赛的代码,用到了无向图的双连通分量 ,gabow部分是求双联通的

    阿里2015算法工程师机试题

    描述中提到了强联通分支和联通分支,强联通分支是指图中任意两个节点都互相可达的有向图子图,而联通分支是无向图中的概念,但在有向图中,每个联通分支可以看作一个强联通分量的集合。可以使用深度优先搜索(DFS)或...

    计数与期望问题选讲_陈立杰

    4. Tournament问题:这个问题关注的是竞赛图的强联通分量问题。竞赛图是一个有向图,对于任意两点a和b,要么存在从a到b的有向边,要么存在从b到a的有向边。问题要求计算出所有可能的竞赛图中强联通分量的数量和。...

    CCF CSP认证资料

    **定义**:在一个有向图中,若两个顶点之间存在双向可达路径,则这两个顶点属于同一个强联通分量。 **算法**: - Tarjan算法是一种高效地找到图中所有强联通分量的方法。 - 基于DFS实现。 ##### 6. 并查集 **定义*...

    强联通分支 Gabow算法(英文)

    ### 强联通分支 Gabow算法解析 #### 引言与背景 在计算机科学与图论领域,图的连通性分析是一项基础而重要的任务。其中,强连通分量(Strongly Connected Components, SCCs)与双连通分量(Biconnected Components...

    图论模板详细

    - 有向图强联通分量Kosaraju算法和Tarjan算法:用于求解有向图中的强连通分量,即在有向图中找到最大的强连通子图。 - 2-sat问题:是布尔可满足性问题的一种形式,用于求解一组变量满足一组二元逻辑公式的问题。 ...

    强联通缩点在数据库设计中的应用.pptx

    可以根据强联通缩点的结果来进行相应的调整,比如重新设计表之间的关联关系,或者通过引入新的实体来打破环,确保数据的一致性和查询效率。 ### 冗余数据处理 #### 冗余数据的危害 1. **存储空间浪费**:冗余数据...

    Tarjan.ppt

    Tarjan割点割边,强联通分量讲解

    noip-数据结构习题.pdf

    5. **受欢迎的牛**(BZOJ1051):强联通分量是图论中的概念,用于识别图中的强连通子图。 6. **部落划分**(BZOJ1821):结合二分查找和最小生成树,可能需要解决将部落划分为若干互相无冲突的小部落的问题。 7. *...

    gabow算法的实现

    求有向图强联通分量,采用gabow算法实现

    滑稽并没有整理完且乱七八糟的模板1

    4.最小生成树 5.拓扑排序 6.差分约束 7.倍增求LCA 8.有向图的强联通分量 9.无向图的双联通分量 1.树状数组 2.线段树 3.树链剖分 4.平衡树

    图的遍历——计算连通分量个数

    要求采用邻接矩阵作为无向图的存储结构,邻接表作为有向图的存储结构,完成无向图和有向图的建立,并对建立好的图进行深度和广度优先遍历。具体实现要求: 1. 通过键盘输入图的顶点...3. 统计两个图的连通分量的个数。

    acm-template:acm-icpc的一些模板

    强联通分量 无向图求桥 无向图求割点 二分图匹配 匈牙利算法 Hopcroft-Karp算法 二分图最优匹配 KM 算法 最小树形图 朱刘算法 最大密度子图 01分数规划 && 网络流 无向图全局最小割 度数限制的最小生成树 最小直径...

    提取连通分量算法在棒材自动计数中的应用

    为了满足棒材计数在工业生产的实际应用需求,提出了一种基于提取连通分量的算法,以实现目标棒材计数区域的自动定位,并对定位的区域采用提取连通分量算法实现对轮廓的标注,最后提出了一种区域轮廓周长的校正方法,...

    输出连通分量的个数和各连通分量的顶点集

    本文将深入探讨如何通过深度优先遍历(Depth First Search, DFS)的方法来处理一个以邻接表形式表示的无向图,并具体实现输出连通分量的个数及其对应的顶点集合。 ### 一、基础知识 #### 1. 图的基本概念 - **图*...

Global site tag (gtag.js) - Google Analytics