精华内容
下载资源
问答
  • 一、极大连通子图 (1)极大连通子图是连通图的一个连通分量,连通分量本身是一个连通图。 (2)连通图的极大连通子图只有一个就是其本身,是唯一的。 (3)非连通的极大连通子图有多个,每一个都是一个连通图。 为...

    一、极大连通子图

    (1)极大连通子图是连通图的一个连通分量,连通分量本身是一个连通图。
    (2)连通图的极大连通子图只有一个就是其本身,是唯一的。
    (3)非连通的极大连通子图有多个,每一个都是一个连通图。
    为什么称为极大?如果将连通分量外的任意一个顶点添加进连通分量都会造成不连通。

    二、极小连通子图
    (1)一个连通图的生成树是该连通图的极小连通子图。同一个连通图可以有不同的生成树,所以生成树不是唯一的。
    (2)极小连通子图=生成树,则有n个顶点,必然有n-1条边。
    (3)为什么称为最小?如果去极小连通子图的一条边就无法构成树,不满足树的定义。意味着在极小连通子图中每一条边都是必不可少的。如果给极小连通子图增加一条边,n个节点,n条边,则必然会构成环。意味只有能够连通图中所有顶点而又不会构成回路的任意的子图都是他的生成树。











    展开全文
  • 强连通子图:在有向图中,如果删除这个图中的一些边(删除的边数>=0),剩下的部分仍然是连通的,那么称这个图是原图的强连通子图极大连通子图:如果无向图的连通子图包含它的原图中所有与它自身有关的边,...

    连通图:在无向图中,从任意一个结点出发都能到达任意一个结点,那么称该无向图为连通图。
    强连通图:在有向图中,从任意一个结点出发都能到达任意一个结点,那么称该有向图为强连通图。
    连通子图:在无向图中,如果删除这个图的一些边(删除的边数>=0),剩下的部分仍然是连通的,那么称这个图是原图的连通子图。
    强连通子图:在有向图中,如果删除这个图中的一些边(删除的边数>=0),剩下的部分仍然是连通的,那么称这个图是原图的强连通子图。
    极大连通子图:如果无向图的连通子图包含它的原图中所有与它自身有关的边,那么称它为极大连通子图。
    极大强连通子图:如果有向图的连通子图包含它的原图中所有与它自身有关的边,那么称它为极大强连通子图。
    极小连通子图:如果删除无向图的连通子图的任意一条边都会导致该子图不再连通,那么称这个子图为极小连通分量。
    极小强连通子图:如果删除有向图的连通子图的任意一条边都会导致该子图不再连通,那么称这个子图为极小强连通子图。
    连通分量:无向图的极大连通子图为该图的连通分量。
    强连通分量:有向图的极大强连通子图为该图的强连通分量。
    弱连通图:将有向图的所有的有向边替换为无向边,所得到的图称为原图的基图。如果一个有向图的基图是连通图,则该有向图是弱连通图。
    注解:连通图的【强】连通分量只有一个就是其自身;非连通图的【强】连通分量有多个。

    展开全文
  • 首先,明确概念间的关系 ...(强连通、强连通分量 = 极大强连通子图)∈ 有向图 连通、强连通        连通:无向图中,顶点v可以到达顶点w,称v和w是连通的。      ...

    首先,明确概念间的关系

           (连通、连通分量 = 极大连通子图)∈ 无向图
           (强连通、强连通分量 = 极大强连通子图)∈ 有向图

    连通、强连通

           连通:无向图中,顶点v可以到达顶点w,称v和w是连通的。
           强连通:有向图中,顶点v可以到达顶点w且顶点w可以到达顶点v,称v和w是强连通的。

    展开全文
  • Strongly connected Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 4721 Accepted Submission(s): 1867   Problem Description ...

    Strongly connected

    Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
    Total Submission(s): 4721    Accepted Submission(s): 1867


     

    Problem Description

    Give a simple directed graph with N nodes and M edges. Please tell me the maximum number of the edges you can add that the graph is still a simple directed graph. Also, after you add these edges, this graph must NOT be strongly connected.
    A simple directed graph is a directed graph having no multiple edges or graph loops.
    A strongly connected digraph is a directed graph in which it is possible to reach any node starting from any other node by traversing edges in the direction(s) in which they point. 

     

     

    Input

    The first line of date is an integer T, which is the number of the text cases.
    Then T cases follow, each case starts of two numbers N and M, 1<=N<=100000, 1<=M<=100000, representing the number of nodes and the number of edges, then M lines follow. Each line contains two integers x and y, means that there is a edge from x to y.

     

     

    Output

    For each case, you should output the maximum number of the edges you can add.
    If the original graph is strongly connected, just output -1.

     

     

    Sample Input

    
     

    3 3 3 1 2 2 3 3 1 3 3 1 2 2 3 1 3 6 6 1 2 2 3 3 1 4 5 5 6 6 4

     

     

    Sample Output

    
     

    Case 1: -1 Case 2: 1 Case 3: 15

     

     

    Source

    2013 Multi-University Training Contest 4

     

     

    Recommend

    zhuyuanchen520   |   We have carefully selected several similar problems for you:  6460 6459 6458 6457 6456 

     

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    #include<stack>
    #include<vector>
    #define maxn 100005
    using namespace std;
    int low[maxn];
    int pre[maxn];
    int in[maxn];
    int out[maxn];
    int sccno[maxn];
    stack<int>s;
    vector<int>g[maxn];
    int sccnt;
    int dfsclock;
    int num[maxn];
    int t,n,m;
    void tarjan(int u)
    {
        low[u]=pre[u]=++dfsclock;
        s.push(u);
        for(int i=0;i<g[u].size();i++)
        {
            int v=g[u][i];
            if(!pre[v])
            {tarjan(v);
                low[u]=min(low[u],low[v]);
    
            }
            else if(!sccno[v])
            {
                low[u]=min(low[u],pre[v]);
            }
        }
        if(low[u]==pre[u])
        {
            sccnt++;
            num[sccnt]=0;
            while(true)
            {
                int x=s.top();
                s.pop();
                sccno[x]=sccnt;
                num[sccnt]++;
                if(x==u)
                    break;
            }
        }
    }
    void findscc(int n)
    {
        memset(pre,0,sizeof(pre));
        memset(low,0,sizeof(low));
        memset(num,0,sizeof(num));
    memset(sccno,0,sizeof(sccno));
            dfsclock=sccnt=0;
            for(int i=0;i<n;i++)
                if(!pre[i])
                tarjan(i);
    
    }
    int main()
    {
        scanf("%d",&t);
        int w=0;
        while(t--)
        {w++;
            scanf("%d%d",&n,&m);
             for(int i=0;i<=n;i++)
            g[i].clear();
            int u,v;
            for(int i=0;i<m;i++)
            {scanf("%d%d",&u,&v);
            u--;
            v--;
            g[u].push_back(v);
    
        }
        findscc(n);
        for(int i=1;i<=sccnt;i++)
        {
            in[i]=out[i]=1;
        }
        for(int u=0;u<n;u++)
            for(int i=0;i<g[u].size();i++)
        {
            int v=g[u][i];
            if(sccno[u]!=sccno[v])
                out[sccno[u]]=in[sccno[v]]=0;
        }
        long long ans=0;
        int minv=1e8;
        for(int i=1;i<=sccnt;i++)
            if(out[i]||in[i])
            minv=min(num[i],minv);
            ans=(long long)n*n-n-(long long)minv*(n-minv)-m;
            printf("Case %d: %lld\n",w,sccnt==1?-1:ans);
    
    }
    return 0;
    }
    

     

    展开全文
  • 2.最大半连通子图的个数好了,这个问题看上去确实恶心,但不难发现,一个强连通子图一定是半连通的。 而且任何点和强连通子图中的任意一个点有连接,那么它就和所有强连通子图中的点有半连通关系。 那么这真是好...
  • 强连通图:最短路径就是形成闭环。 一个有向无环图的拓扑序列不是唯一的: 注意: 1)只有有向无环图才存在拓扑序列; 2)对于一个DAG(Directed Acyclic Graph,有向无环图),可能存在多个拓扑序列; 进行拓扑排序...
  • 求极大强连通分量的Tarjan算法 首先,在有向图G中,如果两个顶点vi,vj间(vi<>vj)都有一条从vi到vj的有向路径,同时还有一条从vj到vi的有向路径,则称两个...非强连通图有向图的极大强连通子图,称为强连通...
  • 有向图的极大强连通分量

    千次阅读 2008-12-19 23:04:00
    1. 对有向图G进行DFS,记录时间戳Ai,形成森林W12. 将G中所有边反向形成G3.按时间戳由大到小对G进行DFS,形成新森林W2.由此,形成的每棵树都是一个极大强连通子图
  • 强连通分量

    2019-10-03 23:25:57
    强连通分量 相关概念 强连通:在有向图G中,如果两个顶点u,v间存在一条u到v的路径且也存在 一条...(极大强连通子图:G是一个极大强连通子图,当且仅当G是一个强连通子图且不存在另一个强连通子图G’,使得G是G’的真...
  • 1. 对有向图G进行DFS,记录时间戳Ai,形成森林W1 2. 将G中所有边反向形成G' 3.按时间戳由大到小对G'进行DFS,形成新森林W2. 由此,形成的每棵树都是一个极大强连通子图。...
  • tarjan求强连通分量

    2017-09-15 13:41:17
    tarjan求强连通分量: ...举个例子帮助理解一下:例如下面图一所示,其中子图{1,2,3,5}就是一个极大强连通子图,子图{4}也是一个极大强连通子图。 为什么会这样呢?对于“极大”的理解,就是在一
  • 强连通分量的定义:  在一张有向图中,如果两个...极大强连通子图就是强连通子图中最大的那个,它不被其他强连通子图所包括。  概念挺多,特别混乱的感觉。理一下...  一个强连通图中的每一对顶点都必须强连...
  • 1、强连通:如果两个顶点u和v之间...4、极大强连通子图:G是一个极大强连通子图,当且仅当G是一个强连通子图,且不存在另一个强连通子图G‘使得G是G’的真子集。   一、kosaraju算法 思路:(基于两次dfs有向连...
  • 一、解释在有向图G中,如果两个顶点...非强连通图有向图的极大强连通子图,称为强连通分量(strongly connected components)。 求解有向图的强连通分量算法有很多,例如Kosaraju,Gabow和Tarjan算法,其中Gabow和Tarja
  • 强连通分量:有向图G的极大强连通子图称为G的强连通分量 极大强连通子图:该子图是图G的强连通子图,如果再加入一个顶点,该子图不再是强连通的。 1、先求图G的拓扑排序序列 2、按照拓扑排序序列对rG进行深搜,把能...
  • 非强连通图的极大强连通子图称为强连通分量。 这里,极大强连通子图可以理解为一个子图是强连通图,且它的任意子图都不是强联通。 我们来看下面几张图。 这是强连通图。 这是强连通分量。...
  • 非强连通图有向图的极大强连通子图,称为强连通分量(strongly connected components)。朴素算法根据定义我们不难想到, 对同一张图同时进行正反两次遍历, 对两次的遍历结果取交集, 这里得到的便是强连通图。
  • 有向图的极大强连通子图,称为强连通分量。 极大强联通子图:它是一个图的强连通子图,并且加入任何一个在它的点集外的点都会导致它不再强连通。 Tarjan算法是基于对图深度优先搜索的算法,每个强连通分量为搜索树...
  • 强连通代码 - 详细

    2020-05-19 21:29:40
    强连通定义 定义 在有向图G中,如果两个顶点间至少存在一条互相可达路径,称两个顶点强连通(strongly ...非强连通图有向图的极大强连通子图,称为强连通分量(strongly connected components)。 ...
  • 基本概念 对于有向图上的2个点a,b,若存在一条从a...非强连通图有向图的极大强连通子图,称为强连通分量。 特别地,和任何一个点都不强连通的单个点也是一个强连通分量。 tarjan算法伪代码 tarjan(u) { Dfn[u]=...
  • 定义: 对于有向图上的2个点a,b,若存在一条从a到b的路径...非强连通图有向图的极大强连通子图,称为强连通分量。 单独的点也可以是强连通分量 学习博客:https://www.byvoid.com/zhs/blog/scc-tarjan下面给几个例题

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 601
精华内容 240
关键字:

极大强连通子图