2360. 图中的最长环

news2025/2/27 23:20:27

 方法一:拓扑排序加搜索

class Solution {
public:
    bool vis[100005];
    vector<int>v[100005];
    int dfs(vector<int> &dist,int st,int step)
    {
        vis[st]=true; 
        // cout<<st<<endl;
        int res=0;
        for(int i=0;i<v[st].size();i++)
        {
            int x=v[st][i];
            if(!vis[x] && dist[x]>0)
            {
                dist[x]--;
                res=dfs(dist,x,step+1);
            }
            else if(vis[x] && dist[x]==1)
            {
                dist[x]--;
                return step;
            }
         

        }
       return res;
    }
    int longestCycle(vector<int>& edges) {
        int n=edges.size();
        memset(vis,false,sizeof(vis));
        vector<int>dist(n,0);
        for(int i=0;i<edges.size();i++)
        {
            if(edges[i]!=-1)
            {
                v[i].push_back(edges[i]);
            dist[edges[i]]++;

            }
            

        }
        //bfs去掉不在环里的点
        queue<int>que;
        for(int i=0;i<edges.size();i++)
        {
            if(dist[i]==0)
            {
                que.push(i);
            }
        }
        while(!que.empty())
        {
            int st=que.front();
            que.pop();
            for(int i=0;i<v[st].size();i++)
            {
                int y=v[st][i];
                dist[y]--;
                if(dist[y]==0)
                {
                    que.push(y);
                }
            }
        }
        queue<int>que1;
        //只有环了,dfs搜素环的长度,取最大值
         int res=0;
        for(int i=0;i<n;i++)
        {
            if(dist[i]>0)
            {
                int num=dfs(dist,i,1);
                // cout<<num<<endl;
                res=max(res,num);
            }
        }
        if(res==0) return -1;
        return res;

    }
};

方法二:内向基环树找环 + 利用时间戳简单实现

初始设置一个clock,记录每个点被访问的时间,当第二次访问到该点时,且第一次访问道该点的世时间大于开始时间,说明找到了一个环,用当前时间减去第一次访问到的时间即为环的长度。

class Solution {
public:
   
    int longestCycle(vector<int>& edges) {
        int n=edges.size();
        int time[n];
        int clock=1;
        int res=0;
        memset(time,0,sizeof(time));
        for(int i=0;i<n;i++)
        {
            if(time[i])
            {
                continue;
            }
            int startTime;
            for(int x=i,startTime=clock;x>=0;x=edges[x])
            {
                if(time[x])
                {
                       if(time[x]>=startTime)
                       {
                            res=max(res,clock-time[x]);           
                       }
                       break;
                }
                time[x]=clock++;
            }
        }
        if(!res) res=-1;
        return res; 
    }
};

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

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

相关文章

Angular开发之——Angular项目介绍(03)

一 概述 Angular项目目录介绍Angular程序如何启动 二 Angular项目目录介绍 2.1 项目目录 2.2 目录结构说明 工作区配置文件 node_modules &#xff1a;第三方依赖包存放的目录src&#xff1a;应用源代码目录angular-cli.json&#xff1a; Angular命令行工具的配置文件&…

设计模式之桥接模式释义与举例剖析

文章目录 一、前言二、模式定义三、模式结构四、案例具体实现五、 模式优缺点六、 模式使用场景七、 模式总结 一、前言 开始学Java讲继承的时候&#xff0c;总喜欢用一个例子来讲解&#xff0c;那就是画图形。这里有一个画笔&#xff0c;可以画正方形、长方形、圆形。除了画出…

OpenCV-答题卡识别-四点透视变换

目录 答题卡识别图片读取四点透视变换 划出区域处理选择题区域处理准考证号区域处理科目区域得分导出结果 封装成品 答题卡识别 使用opencv技术&#xff0c;实现对答题卡的自动识别&#xff0c;并进行答题结果的统计 技术目的&#xff1a; 能够捕获答题卡中的每个填涂选项;将…

【新星计划-2023】TCP三次握手和四次挥手讲解

关于TCP三次握手和四次挥手&#xff0c;各位想必在读大学的时候或者是在面试的时候一定遇到过&#xff0c;三次握手和四次挥手本身是不是太难的&#xff0c;但它容易忘&#x1f61e;&#xff0c;今天我就在这里给大家讲解一下三次握手与四次挥手。 一、三次挥手 TCP三次握手建…

我,大厂P9,找不到工作

作者| 老W 编辑| Emma 来源| 技术领导力(ID&#xff1a;jishulingdaoli) K哥写在前面的话&#xff1a;这是一位读者投稿&#xff0c;读者老W讲述了自己从大厂P9失业后、再就业的故事&#xff0c;并总结了自己的心路历程&#xff0c;很真实的记录与思考&#xff0c;值得大家借…

SensorX2car:在道路场景下的完成传感器到车体坐标系标定

文章&#xff1a;SensorX2car: Sensors-to-car calibration for autonomous driving in road scenarios 作者&#xff1a;Guohang Yan, Zhaotong Luo, Zhuochun Liu and Yikang Li 编辑&#xff1a;点云PCL 代码&#xff1a;https://github.com/OpenCalib/SensorX2car 作者单位…

IDEA+maven+Springboot工程创建超详细过程示例

IDEAmavenSpringboot工程创建超详细过程示例 1、IDEA、Maven下载安装及IDEA配置Maven教程2、IDEAmavenSpringboot的web工程创建示例2.1 SpringBoot简介2.2 maven形式创建sprintboot工程2.3 导入相关依赖2.4 创建SpringBoot启动类2.5 创建 Controller2.6 启动项目2.7 配置端口信…

springboot第22集:security,Lombok,token,redis

Spring Security是一个基于Spring框架的权限管理框架&#xff0c;用于帮助应用程序实现身份验证和授权功能。它可以为Web应用程序、REST API和方法级安全性提供支持&#xff0c;并支持各种认证方式。 Spring Security最初是Acegi Security的前身&#xff0c;但由于其配置繁琐而…

【第六期】Apache DolphinScheduler 每周 FAQ 集锦

点击蓝字 关注我们 摘要 为了让 Apache DolphinScheduler 的广大用户和爱好者对于此项目的疑问得到及时快速的解答&#xff0c;社区特发起此次【每周 FAQ】栏目&#xff0c;希望可以解决大家的实际问题。 关于本栏目的要点&#xff1a; 本栏目每周将通过腾讯文档&#xff08;每…

用排列组合来编码通信(六)——魔术《5张牌的预言》的魔术拓展之《My Fitch Four Glory》...

早点关注我&#xff0c;精彩不错过&#xff01; 在上一篇中&#xff0c;我们介绍了《5张牌的预言》这个魔术的一个精彩的扩展表演《Eigens Value》&#xff0c;把这个魔术和数学性质的结合做到了极致&#xff0c;相关内容请戳&#xff1a; 用排列组合来编码通信&#xff08;五&…

第二十二章 Unity 光照贴图

光照贴图过程将预先计算场景中静态物体表面的亮度&#xff0c;并将结果存储在称为“光照贴图”的纹理中供以后使用。光照贴图可以包含直接光照和间接光照&#xff0c;以及阴影效果。但是&#xff0c;烘焙到光照贴图中的数据无法在运行时更改&#xff0c;这就是为什么移动静态物…

Angular开发之——Angular介绍(01)

一 概述 Angular是什么AngularJS和Angular关系Angular特性Angular的发展历史Angular学习建议 二 Angular是什么 Angular(读音[ˈŋɡjələr])是一套用于构建用户界面的javaScript框架。由Google开发和维护&#xff0c;主要被用来开发单页面应用程序类似于Vue.js(MVVM数据驱动…

视觉检测技术在图书生产缺陷控制中的应用

在过去我们一直向大家展示的是视觉检测应用在重工业制造之上&#xff0c;让很多人误以为这种新兴的检测技术更加倾向于重工业&#xff0c;或者说因为成本因素&#xff0c;这项技术对目前的轻工业来说更加的不友好&#xff0c;其实并不是这样的。 轻工业我们之所以很少的提机器…

docker入门和docker应用场景,镜像制作,服务编排,docker私服

一、简介 docker解决了什么问题docker和虚拟机的区别在CentOS7里安装docker 1. docker简介 我们写的代码会接触到好几个环境&#xff1a;开发环境、测试环境以及生产环境等等。多种环境去部署同一份代码&#xff0c;由于环境原因往往会出现软件跨环境迁移的问题&#xff08;也就…

黏包和半包

黏包和半包 黏包&#xff1a; Slf4j public class HelloWorldServer {public static void main(String[] args) {NioEventLoopGroup boss new NioEventLoopGroup();NioEventLoopGroup worker new NioEventLoopGroup();try {ServerBootstrap serverBootstrap new ServerBoo…

open3d教程(二):可视化三维模型,并转换成点云(Python版本)

1、三维模型获取 可以自己用建模软件建立一个模型从free3d免费下载 2、关键函数 open3d.visualization.draw_geometries 参数&#xff1a; geometry_list(List[open3d.geometry.Geometry])&#xff1a;要可视化的几何体列表.window_name(str, optional, defaultOpen3D)&…

Linux环境下编程遇到“fatal error:stdio.h:没有那个文件或目录”错误解决办法

我是荔园微风&#xff0c;作为一名在IT界整整25年的老兵&#xff0c;今天总结一下linux环境下如何解决一个常见的问题&#xff0c;也就是“fatal error:stdio.h:没有那个文件或目录”错误。 不少初学者在linux环境下用gcc编译C语言时&#xff0c;经常会遇到这个问题。 比如当…

工具推荐二

&#xff08;点击上方公众号&#xff0c;可快速关注&#xff09; GUI框架 我是个后端程序员&#xff0c;使用GUI框架的机会很少&#xff0c;主要用来编写个人或工作中的一些小工具上&#xff0c;经验有限&#xff0c;仅供参考。 Tk框架这个框架tcl语言自带&#xff0c;在python…

海报图片生成服务在狐友的落地实践

本文字数&#xff1a;22817字 预计阅读时间&#xff1a;58分钟 项目背景 狐友作为搜狐的一款社交产品&#xff0c;在流量传播上有着旺盛的需求点。而在流量传播所需的众多载体之中&#xff0c;海报图片以其简单的分享形式、可定制的视觉体验、自带二维码识别导流等特点&#xf…

入门与 Follow GPT 的路径分析:LLM 道阻且长,行则将至

动手点关注 干货不迷路 本文只用于技术交流&#xff0c;仅代表作者个人观点。 作为 CEO&#xff0c;Sam 将 OpenAI 的内部氛围组织的很好&#xff0c;有位 OpenAI 的前员工告诉拾象团队&#xff0c;当 2018 年 GPT-2 的论文被驳回时&#xff0c;Sam 在团队周会上将拒信的内容朗…