有向图连通分量SCC】的更多相关文章

在无向图中,如果从顶点vi到顶点vj有路径,则称vi和vj连通.如果图中任意两个顶点之间都连通,则称该图为连通图,否则,称该图为非连通图,则其中的极大连通子图称为连通分量,这里所谓的极大是指子图中包含的顶点个数极大. 直观地说,极大就是不能再大,或者说再大也不能超过自己.因此,极大连通子图就是: 设 1) S为G的子图,S连通, 2) 如果有S'也是G的连通子图,且S是S'的子图,可推出S = S', 则称S是G的极大连通子图. 极小连通子图正好相反,极小就是不能再小,再多小一点就会不连通或点不…
迷宫城堡 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 9893    Accepted Submission(s): 4433 Problem Description 为了训练小希的方向感,Gardon建立了一座大城堡,里面有N个房间(N<=10000)和M条通道(M<=100000),每一个通道都是单向的,就是说若称某通道连通了…
前面的文章介绍了如何用Tarjan算法计算无向图中的e-DCC和v-DCC以及如何缩点. 本篇文章资料参考:李煜东<算法竞赛进阶指南> 这一篇我们讲如何用Tarjan算法求有向图的SCC( 强连通分量 )已经如何缩点. 给定一张有向图,若对于图中任意两个节点x和y, 既有x到y的路径,又有y到x的路径,则该有向图是一张“强连通图”. 有向图的极大连通子图被称为“强连通分量”,即SCC. 一个环一定是强连通图.如果既有x到y的路径,又有y到x的路径,那么x和y就一定在一个环中. 这就是Tarja…
P2746 [USACO5.3]校园网Network of Schools https://www.luogu.org/problem/P2746 题目描述 一些学校连入一个电脑网络.那些学校已订立了协议:每个学校都会给其它的一些学校分发软件(称作"接受学校").注意即使 B 在 A 学校的分发列表中, A 也不一定在 B 学校的列表中. 你要写一个程序计算,根据协议,为了让网络中所有的学校都用上新软件,必须接受新软件副本的最少学校数目(子任务 A).更进一步,我们想要确定通过给任意一…
RobertTarjan真的是一个传说级的大人物. 他发明的LCT,SplayTree这些数据结构真的给我带来了诸多便利,各种动态图论题都可以用LCT解决. 而且,Tarjan并不只发明了LCT,他对计算机科学做出的贡献真的很多. 这一篇我就来以他名字命名的Tarjan算法可以O(n)求出无向图的割点和桥. 进一步可以求出无向图的DCC( 双连通分量 ).不止无向图,Tarjan算法还可以求出有向图的SCC( 强连通分量 ). Tarjan算法基于dfs,接下来我们引入几个基本概念. dfn:时…
题意:求n个点有向图其中SCC是一个的方案数 考虑求出若干个不连通的每个连通块都是SCC方案数然后再怎么做一做.(但是这里不能用Ln,因为推不出来) 设$f_n$为答案, $g_n$为n个点的有向图,分成若干个连通块,每个连通块都是一个SCC,且当连通块大小为奇数时候贡献1系数,偶数时候贡献-1系数.(这里把系数放进去可以避免再来一个函数的麻烦!) $h_n$表示n个点有向图个数$h_n=2^{n*(n-1)}$ $h_n=\sum_{i=1}^nC(n,i)\times g(i)\times…
题目大意:维护 M 个差分约束关系,问是否可以满足所有约束,如果满足输出一组解.\(N<=1e5\) 题解:差分约束模型可以通过构建一张有向图来求解.是否满足所有约束可以利用 spfa 进行判断,但是这道题数据范围是 1e5,spfa 很可能会被卡.重新考虑无解的情况,若满足最短路约束,则图中存在负环无解,最长路约束的情况则是存在正环无解.可以利用这一性质,对整个有向图进行 scc 缩点,若一个强连通分量中的边权和大于 0,则无解.缩点之后,在 DAG 上执行 dp 即可求得一组符合条件的解.…
题意:在一张图中最少可以添加几条边,使其中任意两点间都有两条不重复的路径(路径中任意一条边都不同). 分析:问题就是最少添加几条边,使其成为边双连通图.可以先将图中所有边双连通分量缩点,之后得到的就是一棵树. 那么问题又转化成为:在这棵树上添加几条边使其成为一个双连通分量.答案是缩点之后(leaf+1)/2,其中leaf是树的叶节点个数. 具体方法为,首先把两个最近公共祖先最远的两个叶节点之间连接一条边,这样可以把这两个点到祖先的路径上所有点收缩到一起,因为一个形成的环一定是双连通的.然后这样不…
题意:有N个人要参加会议,围圈而坐,需要举手表决,所以每次会议都必须是奇数个人参加.有M对人互相讨厌,他们的座位不能相邻.问有多少人任意一场会议都不能出席. 分析:给出的M条关系是讨厌,将每个人视作点,在没有讨厌关系的人之间连边. 问题中很重要的一点是:任意一场会议都不能参加.能够参加某一场会议就意味着,参加会议的人可以构成一个奇回路(他们要围圈而坐,且必须出席奇数个人).那么问题就转化成了求有多少个点不在任意一个奇回路中. 简单圈上的所有结点都属于同一个点双连通分量,因此找出所有的点双连通分量…
上一篇讲了如何应用Tarjan算法求出e-DCC和v-DCC. 那么这一篇就是e-DCC和v-DCC的应用之一:缩点. 先讲e-DCC的缩点. 我们把每一个e-DCC都看成一个节点,把所有桥边(x,y)看成连接编号为c[x]和c[y]的两个e-DCC间的边,这样我们就会得到一棵树或者森林(原图不连通).给出缩点的代码,这份代码把e-DCC缩点并把生成的树(森林)储存在另一个邻接表中. #include<bits/stdc++.h> #define N 100010 using namespac…