【UOJ 92】有向图的强连通分量

【题目描述】:

有向图强连通分量:在有向图G中,如果两个顶点vi,vj间(vi>vj)有一条从vi到vj的有向路径,同时还有一条从vj到vi的有向路径,则称两个顶点强连通(strongly connected)。如果有向图G的每两个顶点都强连通,称G是一个强连通图。有向图的极大强连通子图,称为强连通分量(strongly connected components)。

现在给出一个有向图。结点个数N(<=1000)(编号1~N),边数M(<=5000)。请你按照从小到大的顺序输出最大的强连通分量结点编号。

【输入描述】:

第一行N和M 以下M行,每行两个空格隔开的整数表示一条有向边;

【输出描述】:

输出一行,最大的强连通分量的结点(由小到大输出)

【样例输入】:

10 20
2 2
5 3
8 5
3 4
8 7
10 10
10 6
7 7
2 8
3 2
8 1
3 8
1 7
8 10
7 5
6 4
9 2
8 6
7 5
1 8

【样例输出】:

1 2 3 5 7 8

【时间限制、数据范围及描述】:

时间:1s 空间:256M

N<=1000, M<=5000

 

tarjan模板如下:

#include "iostream"
#include "cstdio"
#include "cstdlib"
#include "stack"
#include "algorithm"
using namespace std;
#define MAXN 1005
#define MAXM 5005
int n,m;/*********************** 链式前向星 
***********************/
struct ENode{int v,w,next;
}edge[MAXM];    //边集 
int p[MAXN],ec;    //点集和边集计数 
void InsertE(int u, int v, int w){    //插入边 edge[++ec].v = v; edge[ec].w = w;edge[ec].next = p[u];p[u] = ec;
}/***********************Tarjan算法基础 搜索强连通分量 
***********************/
int dfn[MAXN],cTime,low[MAXN];    //时间戳,时间戳计数,祖先时间。 
int gid[MAXN],gc;    // 分量数组,分量计数。 
bool ins[MAXN]; stack<int> sTar;    //入栈标志,辅助栈 
void Tarjan(int u){dfn[u]=low[u]=++cTime;        //时间戳与祖先时间初始化 ins[u]=1; sTar.push(u);    //入栈 for(int i=p[u];i;i=edge[i].next){    //递归处理所有子结点 int v=edge[i].v;if(!dfn[v]){Tarjan(v);low[u]=min(low[u],low[v]);    //利用子孙,更新能回指的祖先时间戳 
        }else if(ins[v])        //记录U能回指的最早祖先的时间戳 low[u]=min(low[u],dfn[v]);}if(low[u]>=dfn[u]){        //判断U是否分量的根 gc++;int i;do{i=sTar.top(); ins[i]=0;gid[i]=gc; sTar.pop();    //分量出栈}while(i!=u);    //出栈至当前结点,包括当前结点 
    }
}int main()
{freopen("connect.in","r",stdin);freopen("connect.out","w",stdout);int x,y,c=0;cin >> n >> m;for(int i=0;i<m;i++){cin >> x >> y;InsertE(x,y,0);}for(int i=1;i<=n;i++)if(!dfn[i]) Tarjan(i);int a[MAXN]={0};for(int i=1;i<=n;i++){a[gid[i]]++;if(a[gid[i]]>a[a[0]])a[0]=gid[i];}for(int i=1;i<=n;i++)if(gid[i]==a[0])cout << i << ' ';cout << endl;return 0;
}

 

转载于:https://www.cnblogs.com/wuhu-JJJ/p/11139459.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/386490.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

这篇文章可以满足你80%日常工作!一线互联网公司面经总结

前言 最近发现大家都喜欢看面试相关的文章&#xff0c;我也跟一波风&#xff0c;总结了一下我面试中所遇到的问题总结&#xff0c;分享一下面试中被问的最多的一些问题。 希望对正在找工作的朋友提供一些帮助。 好了话不多说&#xff0c;进入正题。 作为安卓开发者&#xff…

java并发synchronized 锁的膨胀过程(锁的升级过程)深入剖析(1)

我们先来说一下我们为什么需要锁&#xff1f; 因为在并发情况为了保证线程的安全性&#xff0c;是在一个多线程环境下正确性的概念&#xff0c;也就是保证多线程环境下共享的、可修改的状态的正确性&#xff08;这里的状态指的是程序里的数据&#xff09;&#xff0c;在java程…

MSCRM二次开发实现自动编号功能

功能描述&#xff1a;对客户实体实现自动编号功能&#xff0c;1、2、3、4...... 自动编号存放于属性accountnumber.原  理&#xff1a;在mscrm服务器用一个文本文件存放当前最新编号&#xff0c;每当创建客户记录时在PreCreate事件接口做以下步骤&#xff1a;1、锁定文本文件…

这篇文章可以满足你80%日常工作!成功入职腾讯

什么是中年危机 根据权威数据显示&#xff0c;国内IT程序员鼎盛时期是在25-27岁左右&#xff0c;30岁对于程序员而言完全是一个38线&#xff0c;接着就是转业转岗的事情&#xff0c;这一点在业界也算是一个共识了。 大学毕业步入IT行业普遍年龄也是在22岁左右&#xff0c;然而…

java并发synchronized 锁的膨胀过程(锁的升级过程)深入剖析(2)

接下来我们分析两个批量偏向撤销的相关案例&#xff08;禁止偏向锁延迟的情况下&#xff1a;-XX:UseBiasedLocking -XX:BiasedLockingStartupDelay0&#xff09;&#xff1a; 案例一&#xff1a; 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28…

System.Configuration命名空间下的关键类

1.ConfigurationManager和 WebConfigurationManager类&#xff1a; 使用 ConfigurationManager 类&#xff0c;可以访问计算机和应用程序的配置信息。ConfigurationManager 是处理客户端应用程序配置文件的首选方法&#xff1b;不推荐使用任何其他方法。对于 Web 应用程序&…

连续四年百度Android岗必问面试题!Android校招面试指南

前言 刚从阿里面试回来&#xff0c;想和大家分享一些我的面试经验&#xff0c;以及面试题目。 这篇文章将会更加聚焦在面试前需要看哪些资料&#xff0c;一些面试技巧以及一些这次的面试考题。 面试经历 7月确定想走后开始看各种面经&#xff0c;复习基础知识&#xff0c;月…

Spring Boot教程(11) – 理解注解@ControllerAdvice

之前&#xff0c;我们介绍过ModelAttribute和ExceptionHandler,前者可以往请求的Model里加数据&#xff0c;后者可以接受请求处理方法抛出的异常。但是他们放在控制器(Controller)里的时候&#xff0c;作用范围是有限的&#xff0c;只管当前控制器里的方法。如果你有几百个控制…

透彻解析!字节跳动Android实习面试凉凉经,年薪超过80万!

什么是Kotlin? Kotlin&#xff0c;如前面所说&#xff0c;它是JetBrains开发的基于JVM的语言。JetBrains因为创造了一个强大的Java开发IDE被大家所熟知。Android Studio&#xff0c;官方的Android IDE&#xff0c;就是基于Intellij&#xff0c;作为一个该平台的插件。 Kotli…

synchronized 底层如何实现?什么是锁升级、降级?

synchronized 底层如何实现&#xff1f;什么是锁升级、降级&#xff1f; synchronized 代码块是由一对 monitorenter/monitorexit 指令实现的&#xff0c;Monitor 对象是同步的基本实现单元。 https://docs.oracle.com/javase/specs/jls/se10/html/jls-8.html#d5e13622 在Jav…

Spring主要用到两种设计模式

Spring主要用到两种设计模式 1、工厂模式 Spring容器就是实例化和管理全部Bean的工厂。 工厂模式可以将Java对象的调用者从被调用者的实现逻辑中分离出来。 调用者只关心被调用者必须满足的某种规则&#xff0c;这里的规则我们可以看做是接口&#xff0c;而不必关心实例的具体实…

意外收获字节跳动内部资料,已开源

前言 每年的3、4月份是各大企业为明年拓展业务大量吸纳人才的关键时期&#xff0c;招聘需求集中、空缺岗位多&#xff0c;用人单位也习惯在初秋进行大规模招聘。 金九银十&#xff0c;招聘旺季&#xff0c;也是一个求职旺季。 不打无准备的仗&#xff0c;在这种关键时期&…

OpenJDK研究

这里以32位Windows 7为例 安装必须的软件 JDK1.8CygwinMicrosoft Visual Studio 2010 (请下载英文版) 这里就不介绍怎么安装这些软件了&#xff0c;假设安装后的目录名分别是: (请根据你的实际情况调整这些目录名&#xff09; D:\JavaSE1.8 D:\Cygwin D:\VS2010 增加环境变…

猎头文章(一)

&#xff08;一&#xff09;从来没有想过自己会加入这一行&#xff0c; 从开始自己喜欢的专业通讯&#xff0c; 到后来喜欢的管理&#xff0c;&#xff0c;幻想过是专业高手&#xff0c; 幻想过管理专家&#xff0c; 却从来没有想过进入这一行&#xff0c;但 真的在我刚刚离开校…

成功跳槽百度工资从15K涨到28K,威力加强版

前言 看到一篇文章中提到“最近几年国内的初级Android程序员已经很多了&#xff0c;但是中高级的Android技术人才仍然稀缺“&#xff0c;这的确不假&#xff0c;从我在百度所进行的一些面试来看&#xff0c;找一个适合的高级Android工程师的确不容易&#xff0c;一般需要进行大…

Redis下载及安装(windows版)

下载地址 1、Github下载地址&#xff1a;https://github.com/MicrosoftArchive/redis/releases 2、百度网盘下载地址 https://pan.baidu.com/s/1z1_OdNVbtgyEjiktqgB83g 密码&#xff1a;kdfq 安装过程 1.首先先把下载的压缩包解压到一个文件夹中 2.打开cmd指令窗口 3.输入你刚…

成功跳槽百度工资从15K涨到28K,跳槽薪资翻倍

前言 这篇文章主要是分享今年上半年的面试心得&#xff0c;现已就职于某大厂有三个月了&#xff0c;近期有很多公司均已启动秋招&#xff0c;也祝大家在 2020 的下半年面试顺利&#xff0c;获得理想的offer&#xff01; 之前找工作的那段时间感想颇多&#xff0c;总结一点面试…

分布式锁RedLock的java实现Redisson

1. 概述Redisson是一个在Redis的基础上实现的Java驻内存数据网格&#xff08;In-Memory Data Grid&#xff09;。它不仅提供了一系列的分布式的Java常用对象&#xff0c;还提供了许多分布式服务。其中包括(BitSet, Set, Multimap, SortedSet, Map, List, Queue, BlockingQueue,…

我三年开发经验,从字节跳动抖音离职后,看看这篇文章吧!

最新BAT大厂面试者整理的Android面试题目&#xff01; 近期根据网友分享大厂面试题目&#xff0c;今天我将网友面试的BAT等大厂Android面试题目整理出来&#xff0c;希望能够帮助大家&#xff01; 珍藏版&#xff08;1&#xff09;——高级 UI 晋升 第一节、触摸事件分发机制…

arthas命令redefine实现Java热更新

Arthas非常重要的命令redefine&#xff0c;主要作用是加载外部的.class文件&#xff0c;用来替换JVM已经加载的类&#xff0c;总结起来就是实现了Java的热更新。 redefine在一下几种情况中会失败&#xff1a;1、增加了field&#xff1b;2、增加了method&#xff1b;3、替换正在…