洛谷-P3916 图的遍历

news/2024/9/24 5:14:42/

题目描述

给出 N 个点,M 条边的有向图,对于每个点 v,求A(v) 表示从点 v 出发,能到达编号最大的点。

思路

既然是要找到最大的点,那么我从最大的点开始DFS是否可以?

于是可以反向建图,然后从最大的节点进行DFS,然后依次往前选择节点DFS。

这个过程中可以用vis[]来看这个节点是否被遍历过,可以用maxRearch来记录最大的编号。

比如我们从最大的节点4开始,在这次DFS中,我们标记当前节点的编号,然后进行遍历,凡是遍历到的,都会被赋予当前节点4。

代码

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.StreamTokenizer;
import java.util.Arrays;
import java.util.LinkedList;
import java.util.Stack;public class Main {public static void main(String[] args) throws IOException {StreamTokenizer sc = new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));sc.nextToken();int n = (int) sc.nval;sc.nextToken();int m = (int) sc.nval;LinkedList<Integer>[] links = new LinkedList[n+1];for (int i = 1; i <= n; i++) {links[i] = new LinkedList<>();}for (int i = 0; i < m; i++) {sc.nextToken();int begin = (int) sc.nval;sc.nextToken();int end = (int) sc.nval;links[end].add(begin);  //反向建图}boolean[] vis = new boolean[n+1];int[] maxRearch = new int[n+1];Arrays.fill(maxRearch,Integer.MIN_VALUE);Stack<Integer> stack = new Stack<>();for (int j = n; j > 0 ; j--) {//从大的节点往回开始if(!vis[j]){stack.push(j);while(!stack.isEmpty()){int cur = stack.pop();if(vis[cur])    //之前遍历过continuecontinue;maxRearch[cur] = Math.max(maxRearch[cur],j);vis[cur] = true;    //表明遍历过了for (int i = links[cur].size()-1; i >=0 ; i--) {if (vis[cur]){stack.push(links[cur].get(i));}}}}}for (int i = 1; i <=n ; i++) {System.out.print(maxRearch[i]+" ");}}
}


http://www.ppmy.cn/news/1529657.html

相关文章

OpenHarmony(鸿蒙南向开发)——小型系统内核(LiteOS-A)【扩展组件】上

往期知识点记录&#xff1a; 鸿蒙&#xff08;HarmonyOS&#xff09;应用层开发&#xff08;北向&#xff09;知识点汇总 鸿蒙&#xff08;OpenHarmony&#xff09;南向开发保姆级知识点汇总~ 子系统开发内核 轻量系统内核&#xff08;LiteOS-M&#xff09; 轻量系统内核&#…

[vulnhub] LAMPSecurity: CTF4

https://www.vulnhub.com/entry/lampsecurity-ctf4,83/ 端口扫描主机发现 探测存活主机&#xff0c;138是靶机 nmap -sP 192.168.75.0/24 // Starting Nmap 7.93 ( https://nmap.org ) at 2024-09-23 14:13 CST Nmap scan report for 192…

Actions Speak Louder than Words Meta史诗级的端到端推荐大模型落地

发现好久之前整理的推荐系统被遗忘在了草稿箱&#xff0c;让它出来见见世面。。。后续空了持续更新 1.Background 大模型生成用于推荐场景有如下几个难点&#xff1a; 特征缺乏显式结构。存在sparse和dense特征&#xff0c;其中sparse特征指的是一些离散特征&#xff0c;这部…

H5白色大方图形ui设计公司网站HTML模板源码

源码名称&#xff1a;白色大方图形ui设计公司网站模板源码 源码介绍&#xff1a;一款H5自适应白色大方图形ui设计公司官网网站模板源码。源码含有七个页面&#xff0c;可用于各种设计公司官网。 需求环境&#xff1a;H5 下载地址&#xff1a; https://www.51888w.com/369.ht…

Centos/fedora/openEuler 终端中文显示配置

注意&#xff1a;这里主要解决的是图形界面、远程登录界面的中文乱码问题 系统原生的终端&#xff08;如虚拟机系统显示的终端&#xff09;&#xff0c;由于使用的是十分原始的 TTY 终端&#xff0c;使用点阵字体进行显示&#xff0c;点阵字体不支持中文&#xff0c;因此无法显…

如何将Vue项目部署至 nginx

一、准备工作 1.确保安装了开发软件 VS Code&#xff08;此处可查阅安装 VS Code教程&#xff09;&#xff0c;确保相关插件安装成功 2.安装Node.js 和创建Vue项目&#xff08;此处可查阅安装创建教程&#xff09; 3.成功在VS Code运行一个Vue项目&#xff08;此处可查阅运行…

leetcode91. 解码方法,动态规划

leetcode91. 解码方法 一条包含字母 A-Z 的消息通过以下映射进行了 编码 &#xff1a; “1” -> ‘A’ “2” -> ‘B’ … “25” -> ‘Y’ “26” -> ‘Z’ 然而&#xff0c;在 解码 已编码的消息时&#xff0c;你意识到有许多不同的方式来解码&#xff0c;…

关于puppeteer项目部署到ubuntu报错记录

我的项目是nestpuppeteer的&#xff0c;但这里只记录puppeteer的问题&#xff0c;当然&#xff0c;我在windows上进行开发的时候是不出现任何问题的 部署文档 以下例子使用 ubuntu20.04&#xff0c;puppeteer & puppeteer-core 为 23.2.0/23.4.0 时间&#xff1a;2024/09…