洛谷P1726 上白泽慧音 (强连通分量 Korasaju算法)

有向图的强连通性 & Kosaraju算法(求有向图的强连通分量) 浅谈无向图的连通性 连通图是无向图的一个概念: 在无向图中,若从顶点 v1v_1v1​ 到顶点 v2v_2v2​ 有路径,则称顶点 v1v_1v1​ 与 v2v_2v2​ 是连通的; 如果图中任意一对顶点都是连通的,则称此无向图是连通图。 对于一个非连通图,可以通过深度优先搜索或广度优先搜索来获取它的连通分量:从一个未访问过的节点开始进行深度优先或者广度优先搜索,其能到达的所有顶点及其相关的边构成的子图就是一个连通分量;直到访问完全部的节点,便可以获取该图的所有连通分量。 有向图强连通性的概念 在有向图 阅读详情

题目链接

首先建图时多建一个反向边的图。

vector<int> G[MAXN], rG[MAXN];

算法的核心就是跑两遍 dfs:

第一遍 dfs 求出从一个点开始遍历图回溯时所得到的后序序列(必须是后序,试过不是后序就会错。至于为什么,能力不足实在是研究了好久没研究出来,而且网上的博客也只是讲了要求后序而没有讲为什么)。

第二遍对反向边生成的图 dfs ,从记录的后序序列的最后一个点开始 dfs ,需要 dfs 几次,那么就有几个强连通分量且每次 dfs 能够到达的点一定在一个强连通分量中。

而对于这道题来说,只需要在每次记录强连通分量中点的个数然后取最大的把该分量中的点输出即可。

代码:

#include <cstdio>
#include <cmath>
#include <cstdlib>
#include <cstring>
#include <algorithm>
#include <iostream>
#include <string>
#include <queue>
#include <stack>
#include <vector>
#include <map>
#include <set>
#include <bitset>
using namespace std;

typedef long long ll;
#define int ll
#define INF 0x3f3f3f3f3f3f3f3f
#define MAXM 100000 + 10
#define MAXN 5000 + 10
const ll mod = 1e9 + 7;
#define P pair<int, int>
#define fir first
#define sec second

int n, m;
vector<int> G[MAXN], rG[MAXN];
int post[MAXN], vis[MAXN], cnt;
int ct[MAXN], ctt, num[MAXN];

void dfs(int now)
{
    for(int i = 0; i < G[now].size(); i ++) {
        if(!vis[G[now][i]]) {
            vis[G[now][i]] = 1;
            dfs(G[now][i]);
        }
    }
    post[cnt++] = now;
}

void rdfs(int now)
{
    for(int i = 0; i < rG[now].size(); i ++) {
        if(!vis[rG[now][i]]) {
            vis[rG[now][i]] = 1;
            ct[ctt] ++;
            num[rG[now][i]] = ctt;
            rdfs(rG[now][i]);
        }
    }
}

signed main()
{
    cin >> n >> m;
    for(int i = 0; i < m; i ++) {
        int a, b, x; cin >> a >> b >> x;
        G[a].push_back(b);
        rG[b].push_back(a);
        if(x == 2) {
            G[b].push_back(a);
            rG[a].push_back(b);
        }
    }

    for(int i = 1; i <= n; i ++) {
        if(!vis[i]) {
            vis[i] = 1;
            dfs(i);
        }
    }

    memset(vis, 0, sizeof(vis));
    int ma = 0, ans;
    for(int i = cnt - 1; i >= 0; i --) {
        if(!vis[post[i]]) {
            vis[post[i]] = 1;
            ct[++ctt] = 1;
            num[post[i]] = ctt;
            rdfs(post[i]);
            if(ct[ctt] > ma) {
                ma = ct[ctt];
                ans = ctt;
            }
        }
    }

    cout << ma << endl;
    for(int i = 1; i <= n; i ++) {
        if(num[i] == ans) {
            cout << i << (--ma == 0 ? '\n' : ' ');
        }
    }
}

/*

The WAM is F**KING interesting .

*/

 

强连通分量总结 1主要写两个算法 1.1强连通分量之Korasaju 这个算法主要依赖的是图G与图G的转置强连通分量是一样的。 具体证明先不考虑了(既是强连通分量,正向可以到达,反向一定也可以到达)。 实现过程 1.    dfs原图G,并且记录结束时间(后序)。后序越大,为相对的根节点。(先这样理解) 2.    给后序节点从大到小排序。 3.    依次取后序大的节点在G的转置图上进行dfs,跳 阅读详情

相关推荐

【强连通分量】tarjan算法及kosaraju算法+例题

Tarjan算法 一、算法简介   Tarjan算法是一种由Robert Tarjan提出的求有向图强连通分量的时间复杂度为O(n)的算法。 首先我们要知道两个概念:时间戳(DFN),节点能追溯到的最早的栈中节点的时间戳(LOW)。顾名思义,DFN就是在搜索中某一节点被遍历到的次序号(dfs_num),LOW就是某一节点在栈中能追溯到的最早的父亲节点的搜索次序号。 Tarjan算法是基于深度优先搜...

qq_44293044的博客 1087

强连通分量(Korasaju & Tarjan)学习笔记

好久以前学过的东西...现在已经全忘了 很多图论问题需要用到强连通分量,还是很有必要重新学一遍的 强连通分量(Strongly Connected Component / SCC) 指在一个有向图中,存在的一个顶点集合S,对于所有顶点vi∈S,都保证能够互相到达 环就是最简单的强连通分量之一 但是强连通不等价于简单的环,还有可能是环套环、环套环套环...没有高效的算法很难解决这类问题...

weixin_30401605的博客 387

C++ P1726 上白泽慧音

题目:P1726 上白泽慧音 学习了强联通分量(scc),找了个裸题,用tarjan算法AC了,Dalao勿喷啊! -_-|| # include # include # include # include using namespace std; int n, m, scctot, scc[5010], low[5010], dfn[5010], dfntot, maxn, num;

ice_word的博客 722

反向存储有向边(洛谷p3916)

反向存储有向边 (可能只对很少题有用,但挺有趣的,所以在这里记一下) 题目链接 #include<iostream> #include<cstdio> #include<vector> using namespace std; const int N = 100010; int n, m, p, q, A[N]; vector<int> G[N]; ...

weixin_45363113的博客 182

有向图的强连通分量的分解 总结 poj2186例题举例

常用两种算法: tarjan和korasaju算法。 学习资料: https://www.byvoid.com/blog/scc-tarjan/ https://zh.wikipedia.org/wiki/Tarjan%E7%AE%97%E6%B3%95 挑战P320 定义: 如果一个有向图S,在图中任取两个点u,v,都存在一条u到v的路径,那么称这个图是强连通的。而有向图的一个强连通分

liujc_的专栏 5047

Appsflyer S2S事件上报实战:从参数获取到避坑指南(附Firebase对比)

本文详细解析了Appsflyer S2S事件上报的实战技巧,包括核心参数获取、测试环境搭建、生产环境最佳实践以及高级场景处理。通过对比Firebase的事件上报机制,帮助开发者高效避坑并优化数据上报流程,提升应用分析与营销效果。

egg99的博客 884

强连通分量(Korasaju、Tarjan)

常见的(我见过的)强连通分量的三种算法有:1. Kosaraju算法(双DFS)2.Tarjan算法 3.Gabow http://acm.hdu.edu.cn/showproblem.php?pid=1269 一.Kosaraju算法 算法的核心实现是,首先DFS一遍,得到一个DFS森林,在此过程中得到所有点的拓扑序列(按结束时间由高到低),之后我们建一个反向图,按反拓扑序(结束时间由

梦醒了 2589

STM32F4_LCD显示汉字

LCD显示汉字和显示图片、数字、字符的原理是一样的,都是将汉字、图片、数字以及字符转换点阵,进而通过函数扫描点阵在LCD上显示;

light_2025的博客 1万+

[ACM] POJ 2186 Popular Cows (强连通分量,Kosaraju算法知识整理)

首先是一些知识整理:来源于网络: 以下转载于:http://blog.sina.com.cn/s/blog_4dff87120100r58c.html   Kosaraju算法是求解有向图强连通分量(strong connectedcomponent)的三个著名算法之一,能在线性时间求解出一个图的强分量。 什么是强连通分量?在这之前先定义一个强连通性(strong connectivi

逆风的方向 更适合飞翔 2925

2021-8-14 EDK II编译

2021-8-14 EDK II 编译为什么要写这篇文章新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 为什么要写这篇文章 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdo

qq_45775660的博客 2946

别再乱调了!Zygo MetroPro软件滤波功能保姆级指南,从均值到鲁棒高斯样条一次讲清

本文深入解析Zygo MetroPro软件的滤波功能,从均值滤波到鲁棒高斯样条等九种算法,帮助用户根据测量对象特性选择最佳滤波组合。通过真实工业案例和参数配置指南,提升光学测量数据的准确性和效率,特别适用于硅晶圆、光学镜片等精密测量场景。

weixin_30888413的博客 156

图的强连通性:Korasaju算法实现

有向图的强连通性算法是深度优先搜索的一个经典应用。许多针对有向图的算法都是由此种分解操作开始的。

idevede的博客 1万+

从基础知识到PCB设计,打造全能硬件工程师

成为一名出色的硬件工程师需要在多个领域建立坚实的基础。从硬件基础知识、元器件学习、模拟电子电路到PCB设计,以及数字电子电路与通信,每个方面都是构建全面硬件工程师技能集的重要组成部分。通过深入学习和实践这些领域,你将能够在硬件工程领域中取得更多的成就。

weixin_46969363的博客 2722

强连通分量korasaju算法

O ( V+E )

Y_haowei的博客 587

【高低温试验】试验报告模板

高低温循环试验,验证被测设备(DUT)在极端高温、低温环境下的性能稳定性、功能可靠性及安全性,确保其符合设计规范和相关标准(如GB/T 2423.1、GB/T 2423.2)。:验证设备在剧烈温度变化下的耐受能力(如-40℃↔+85℃,温变速率≥10℃/min)。低温测试标准:GB/T 2423.2-2008(温度-40℃,保持时间4小时):模拟高温高湿环境(如温度+60℃,湿度95%RH),测试防潮性能。

电路巫师把一切不可能变成不可能 1565

gitlib安装、 团队 Git 协作完整教程(企业级标准流程)

最精简的一句话主分支不写代码,每人一条功能分支,每天同步,完成提交合并。

雪的季节 301

poj 2186 korasaju算法 popular cow

写了两天终于写出来了。一开始写的时候卡在了邻接表矩阵的dfs上,今天上午看了一下参考,瞬间感觉自己2了,然后就写出来了用korasaju求强连通分量。又开始卡了,琢磨要是有两个初度为零的强连通的分量怎么办呢?然后瞬间又灰了,最后问我旁边的一哥们怎么解决的,这次发现自己连题意都没读懂,额。。感觉收获颇多。 下面是我花费了很长时间对korasaju算法的证明,及以自己的在学习korasaju算法的时

soul11201 1178

Qwen2.5-VL多模态微调超参数深度解析(上):训练流程与优化策略的量化机制分析

上篇文章通过系统化的对比实验,回答了多模态微调中的三个基础问题:“选什么方法”(LoRA/Full/Freeze/OFT对比)、“用什么配置”(60+组超参数组合)、“达到什么效果”(ROUGE-L/BLEU-4指标)。这些结果为后续工作奠定了实验基线,但也留下了更深层的疑问:为何相同方法在不同数据集上表现迥异?为何某些超参数的微小调整会引发性能剧变?如何在未见过的任务上快速找到最优配置?本文是对前文实验数据的二次挖掘与机理解析。我们将关注点从"做了什么实验"转移到"实验揭示了什么规律",实验视角从"结果对

羊城迷鹿的博客 1005

【题解】洛谷P1726 上白泽慧音(tarjan缩点)

拿到这道题后,知道tarjan算法的应该第一反应就是用tarjan缩点来求。观察一下数据范围,其实我们可以将裸的缩点模板打上去。问题可能集中在第二问,我们只需记录下染色的数组,在第二问时从小到大遍历如果当前点染的是最大的那个颜色,就输出来即可。 (代码下附题目背景人物 车万永不过气) #include&lt;cstdio&gt; #include&lt;iostream&gt; #inclu...

Rem_Inory的博客 347

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

强连通分治算法-Kosaraju算法

11

qq_46076656的博客 375

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

洛谷 P1726:上白泽慧音 ← Tarjan算法

横向边和前向边都无法构成回路,即不能形成大于一个点的强连通分量。所以,Tarjan算法的关键,就是找出重要的后向边,用于求解图中的强连通分量。

hnjzsyjyj的专栏 1430

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

P1726 上白泽慧音 (tarjan)

题目链接:https://www.luogu.org/problem/P1726 题意:求最大强联通分量,若存在两个最大的,输出字典序最小的。 思路:裸的Tarjan算法,讲之前需要介绍一些辅助数组: dfn[ ]:表示这个点的时间戳,也就是第几个搜到的 low[ ]:表示这个点能到达的最小时间戳,或者说是这个点以及其子孙节点连的所有点中dfn[ ]最小的。 stack:表示当前所有可能...

sugarbliss 568

P1726 上白泽慧音 - 强连通分量模板

虽然是模板但是却提醒我有向图一定要试着从每个点出发,不仅仅是因为图不一定连通,更有可能是只从1号点出发哪也去不了的情况 #include <algorithm> #include <iostream> #include <cstring> #include <cstdio> #include <stack> using name...

alc8278的博客 129

luogu P1726 上白泽慧音

上白泽慧音 2017-09-19 题目描述 在幻想乡,上白泽慧音是以知识渊博闻名的老师。春雪异变导致人间之里的很多道路都被大雪堵塞,使有的学生不能顺利地到达慧音所在的村庄。因此慧音决定换一个能够聚集最多人数的村庄作为新的教学地点。人间之里由N个村庄(编号为1..N)和M条道路组成,道路分为两种一种为单向通行的,一种为双向通行的,分别用1和2来标记。如果存在由村庄A到达村庄B的通路,那么我...

weixin_30409849的博客 150

P1726-上白泽慧音

1 #include <bits/stdc++.h> 2 using namespace std; 3 #define pb push_back 4 #define _for(i,a,b) for(int i = (a);i < (b);i ++) 5 #define _rep(i,a,b) for(int i = (a);i > (b);i...

weixin_30276935的博客 171

kosaraju 和 tarjan算法详解(强连通分量)

定 义  在有向图G中,如果任意两个不同的顶点相互可达,则称该有向图是强连通的。 有向图G的极大强连通子图称为G的强连通分支。  转置图的定义:将有向图G中的每一条边反向形成的图称为G的转置GT 。(注意到原图和GT 的强连通分支是一样的)Korasaju算法 1.深度优先遍历G,算出每个结点u的结束时间f[u],起点如何选择无所谓。 每个结点的结束时间和开始时间是dfs序,开始时...

qq_43842119的博客 1611
上一篇: 带权并查集
下一篇: 洛谷P2158 [SDOI2008]仪仗队 (线性筛欧拉函数求前缀和)
ttoobne
博客等级 码龄9年 13粉丝 59原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值