SPFA找负环

2024-01-31(最短路径)-CSDN博客

   求负环的常用方法,基于spfa:

1.统计每个点入队的次数,如果有个点入队n次,则说明存在负环

2.统计当前每个点的最短路中包含的边数,如果某个点的最短路的所包含的边数大于等于         n,则说明也存在环 

当所有点的入队次数大于2n时,我们就认为图中有很大的可能是存在负环的 

(如果TLE了,那么可以把队列换成栈来试一下)

904. 虫洞 - AcWing题库

裸题 

import java.util.*;public class Main{static int N = 510, M = 5500;static int n, m1, m2, idx;static int[] h = new int[N], e = new int[M], ne = new int[M], w = new int[M];static int[] dist = new int[N];static boolean[] st = new boolean[N];static int[] cnt = new int[M];//边数public static void add(int a, int b, int c){e[idx] = b;w[idx] = c;ne[idx] = h[a];h[a] = idx ++;}public static boolean spfa(){Arrays.fill(dist, 0);Arrays.fill(st, false);Arrays.fill(cnt, 0);Queue<Integer> q = new LinkedList<>();//循环队列for(int i = 1; i <= n; i ++){//每个点入队q.offer(i);st[i] = true;}while(!q.isEmpty()){int t = q.poll();st[t] = false;for(int i = h[t]; i != -1; i = ne[i]){int j = e[i];if(dist[j] > dist[t] + w[i]){dist[j] = dist[t] + w[i];cnt[j] = cnt[t] + 1;if(cnt[j] >= n) return true;if(!st[j]){q.offer(j);st[j] = true;}}}}return false;}public static void main(String[] args){Scanner sc = new Scanner(System.in);int T = sc.nextInt();while(T -- > 0){n = sc.nextInt();m1 = sc.nextInt();m2 = sc.nextInt();Arrays.fill(h, -1);idx = 0;//一定要记得!!!while(m1 -- > 0){int a = sc.nextInt();int b = sc.nextInt();int c = sc.nextInt();add(a, b, c);add(b, a, c);}while(m2 -- > 0){int a = sc.nextInt();int b = sc.nextInt();int c = sc.nextInt();add(a, b, -c);//虫洞的通道是单向的}if(spfa()) System.out.println("YES");else System.out.println("NO");}}
}

361. 观光奶牛 - AcWing题库

01分数规划:二分 -> 整理不等式 -> 重新定义边权 -> 判断图中是否存在正环

import java.util.*;public class Main{static int N = 1010, M = 5010;static int n, m, idx;static int[] wd = new int[N];//点权static int[] h = new int[N], e = new int[M], ne = new int[M], wb = new int[M];//边权static double[] dist = new double[N];static int[] cnt = new int[N];static boolean[] st = new boolean[N];public static void add(int a, int b, int c){e[idx] = b;wb[idx] = c;ne[idx] = h[a];h[a] = idx ++;}public static boolean spfa(double x){Arrays.fill(dist, 0);Arrays.fill(st, false);Arrays.fill(cnt, 0);Queue<Integer> q = new LinkedList<>();for(int i = 1; i <= n; i ++){q.offer(i);st[i] = true;}while(!q.isEmpty()){int t = q.poll();st[t] = false;for(int i = h[t]; i != -1; i = ne[i]){int j = e[i];if(dist[j] < dist[t] + wd[t] - x * wb[i]){dist[j] = dist[t] + wd[t] - x * wb[i];cnt[j] = cnt[t] + 1;if(cnt[j] >= n) return true;if(!st[j]){q.offer(j);st[j] = true;}}}}return false;}public static void main(String[] args){Scanner sc = new Scanner(System.in);n = sc.nextInt();m = sc.nextInt();Arrays.fill(h, -1);for(int i = 1; i <= n; i ++){wd[i] = sc.nextInt();}for(int i = 0; i < m;  i ++){int a = sc.nextInt();int b = sc.nextInt();int c = sc.nextInt();add(a, b, c);}//二分double l = 0, r = 1010;while(r - l > 1e-4){double mid = (l + r) / 2;if(spfa(mid)) l = mid;else r = mid;}System.out.printf("%.2f", l);}
}

1165. 单词环 - AcWing题库

这道题就用到了前面说的技巧 

import java.util.*;public class Main{static int N = 700, M = 100010;static int n, idx;static int[] h = new int[N], e = new int[M], ne = new int[M], w = new int[M];static int[] cnt = new int[N];static boolean[] st = new boolean[N];static double[] dist = new double[N];public static void add(int a, int b, int c){e[idx] = b;w[idx] = c;ne[idx] = h[a];h[a] = idx ++;}public static boolean check(double x){Arrays.fill(st, false);Arrays.fill(dist, 0);Arrays.fill(cnt, 0);int count = 0;Queue<Integer> q = new LinkedList<>();for(int i = 0; i < 676; i ++){q.offer(i);st[i] = true;}while(!q.isEmpty()){int t = q.poll();st[t] = false;for(int i = h[t]; i != -1; i = ne[i]){int j = e[i];if(dist[j] < dist[t] + w[i] - x){dist[j] = dist[t] + w[i] - x;cnt[j] = cnt[t] + 1;if(++ count > 10000) return true;if(cnt[j] >= N) return true;if(!st[j]){q.offer(j);st[j] = true;}}}}return false;}public static void main(String[] args){Scanner sc = new Scanner(System.in);while(true){n = sc.nextInt();if(n == 0) break;Arrays.fill(h, -1);idx = 0;for(int i = 0; i < n; i ++){String str = sc.next();int len = str.length();if(len < 2) continue;//转化为26进制数int left = (str.charAt(0) - 'a') * 26 + (str.charAt(1) - 'a');int right = (str.charAt(len - 2) - 'a') * 26 + (str.charAt(len - 1) - 'a');add(left, right, len);}if(!check(0)){System.out.println("No solution");continue;}else{double l = 0, r = 1000;while(r - l > 1e-4){double mid = (l + r) / 2;if(check(mid)) l = mid;else r = mid;}System.out.printf("%.2f\n", r);}}}
}

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

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

相关文章

QT:用opencv的KNN识别图片中的LED数字(一)

前言 一款功能测试的软件demo,使用了QT作为界面,主要使用了opencv的KNN识别,使用gstreamer作为管道,用来打开图片。后期会写一篇打开摄像头实时识别的文章。 (正在写,未完成,稍候) 效果一预览: 效果二预览: 效果三预览: 正在写。。。 设计思路 1. 软件UI设…

【uni-app】condition 启动模式配置,生产环境无效,仅开发期间生效

在小程序开发过程中&#xff0c;每次代码修改后&#xff0c;都会启动到首页&#xff0c;有时非常不方便&#xff0c;为了更高效的开发&#xff0c;有时需要模拟直接跳转到指定的页面&#xff0c; 操作方法如下&#xff1a; 在pages.joson里面配置下列代码&#xff1a; "…

Mybatis-Spring | Mybatis与Spring的“整合“

目录 : 一、配置环境1. 整合环境需导入的JAR :Spring框架所需JARMybatis框架所需JARMyBatis与Spring整合的中间JAR数据库驱动JAR包数据源所需JAR包 &#xff08;下面的例子中 : 用的不是这个数据源&#xff09; 2. 编写“配置文件” 和 “.properties文件” ( 只是概述&#xf…

Claude3真的超越GPT4了吗?

一文探究Claude3真实能力 Claude3就在昨天悄无声息的上线了&#xff0c;OpenAI的好兄弟Anthropic公司仅仅在推特上发了一条消息来宣布这件事情。 Anthropic这次一下就发了三个模型&#xff1a;Opus、Sonnet、Haiku。说实话这名字感觉取得不咋地&#xff0c;主要是看不懂&#x…

图机器学习(3)-面向节点的人工特征工程

0 问题引入 地铁导航图 计算机是看不懂这些图&#xff0c;计算机只能看懂向量、矩阵。 传统图机器学习只讨论连接特征。 构造一个新的特征 x 1 x 2 x_1x_2 x1​x2​&#xff0c;有利于分开这种数据。 人需要去翻译这些计算机不懂的特征&#xff0c;变成计算机可以懂…

javaSE-----继承和多态

目录 一.初识继承&#xff1a; 1.1什么是继承&#xff0c;为什么需要继承&#xff1a; 1.2继承的概念与语法&#xff1a; 二.成员的访问&#xff1a; 2.1super关键字 2.2this和super的区别&#xff1a; 三.再谈初始化: 小结&#xff1a; 四.初识多态&#xff1a; 4.1多…

CAS 登出方案

1.配置 CAS 服务器端 添加配置cas.logout.followServiceRedirects:true&#xff0c;使支持 CAS 退出时支持输入 service 参数为跳转路径 2.配置客户端服务,添加session清除操作 3.前端文件添加跳转重定向 1) 直接在客户端调用http请求/cas/logout去注销不能携带cookie信息, 无…

ATM系统(Java)

ATM系统&#xff08;Java&#xff09; 1、实现要求 实现基本的ATM系统功能&#xff0c;包括注册&#xff0c;登录&#xff0c;查询&#xff0c;取款&#xff0c;存款&#xff0c;以及修改密码等。 2、代码实现 2.1 Test package com.ham;public class Test {public static v…

jmap-各种option参数说明

基本情况 jmap&#xff08;JVM Memory Map&#xff09;&#xff1a;作用一方面是获取dump文件&#xff08;堆转储快照文件&#xff0c;二进制文件&#xff09;&#xff0c;它还可以获取目标Java进程的内存相关信息&#xff0c;包括Java堆各区域的使用情况、堆中对象的统计信息…

高清数学公式视频素材、科学公式和方程式视频素材下载

适用于科普、解说的自媒体视频剪辑素材&#xff0c;黑色背景数学、科学公式和方程式视频素材下载。 视频编码&#xff1a;H.264 | 分辨率&#xff1a;3840x2160 (4K) | 无需插件 | 文件大小&#xff1a;16.12MB 来自PR视频素材&#xff0c;下载地址&#xff1a;https://prmuban…

阿里云服务器怎么使用?3分钟搭建网站教程2024新版

使用阿里云服务器快速搭建网站教程&#xff0c;先为云服务器安装宝塔面板&#xff0c;然后在宝塔面板上新建站点&#xff0c;阿里云服务器网aliyunfuwuqi.com以搭建WordPress网站博客为例&#xff0c;来详细说下从阿里云服务器CPU内存配置选择、Web环境、域名解析到网站上线全流…

设计模式学习笔记 - 设计原则 - 10.实战:针对非业务的通用框架开发,如何做需求分析和设计及如何实现一个支持各种统计规则的性能计数器

前言 接下来我们在结合一个支持各种统计规则的性能计数项目&#xff0c;学习针对一个非业务的通用框架开发&#xff0c;如何来做需求分析、设计和实现&#xff0c;同时学习如何灵活应用各种设计原则。 项目背景 设计开发一个小的框架&#xff0c;能够获取接口调用的各种统计信…

RocketMQ的事务消息是如何实现的?

RocketMQ的事务消息是通过 TransactionListener接口来实现的。 在发送事务消息时,首先向RocketMQ Broker 发送一条‘half消息’(半消息),半消息将被存储在broker端的事务消息日志中,但是这个消息还不能被消费者消费。 接下来,在半消息发送成功后,应用程序通过执行本地事务…

C#,煎饼排序问题(Pancake Sorting Problem)算法与源代码

1 煎饼排序问题 给定一个未排序的数组&#xff0c;任务是对给定数组进行排序。您只能在阵列上执行以下操作。 翻转&#xff08;arr&#xff0c;i&#xff09;&#xff1a;将数组从0反转为i 示例&#xff1a; 输入&#xff1a;arr[]{23、10、20、11、12、6、7} 输出&#xff1a…

开发Chrome扩展插件

1.首先开发谷歌chrome扩展插件&#xff0c;没有严格的项目结构目录&#xff0c;但是需要保证里面有一个mainfest.json文件 (必不可少的文件)。在这个文件里有三个属性必不可少&#xff1a;name、version、mainfest_version&#xff1b; // 清单文件的版本&#xff0c;这个必须写…

二叉搜索树(BST)的创建及增,删,查,改(详解)

目录 初识二叉搜索树&#xff08;BST&#xff09;&#xff1a; 二叉搜索树查找元素&#xff1a; 二叉搜索树修改元素: 二叉搜索树中的增加元素&#xff1a; 二叉搜索树中的删除元素&#xff1a; 初识二叉搜索树&#xff08;BST&#xff09;&#xff1a; 一张图简要概括二…

高级语言讲义2016计专(仅高级语言部分)

1.斐波那契序列的第n项可以表示成以下形式&#xff0c;编写一个非递归函数&#xff0c;返回该数列的第n项的数值 #include <stdio.h>int func(int n) {if(n1||n2)return 1;int p1,q1,num;for(int i3; i<n; i) {numpq;qp;pnum;}return num; } 2.在MXN的二维数组A中&am…

window搭建本地mongo数据库并导入数据

1 window下载mongo数据库 官网&#xff1a;www.mongodb.com 选择 Products > Community Edition 就能进入社区版 在这里下载 windows 版对应的安装包 注意&#xff1a;6.0.1 版本的 MongoDB 配置环境变量有问题&#xff0c;并且我不知道怎么解决&#xff0c;如果想要避免出…

算法学习05:离散化、区间合并

算法学习05&#xff1a;离散化、区间合并 文章目录 算法学习05&#xff1a;离散化、区间合并前言需要记忆的模版&#xff1a;一、离散化1.例题&#xff1a;离散化 区间和&#xff1a;拓展: 二、区间合并&#xff08;贪心&#xff09;1.例题&#xff1a; 总结 前言 需要记忆的模…

基于FastAPI构造一个AI模型部署应用

前言 fastapi是目前一个比较流行的python web框架&#xff0c;在大模型日益流行的今天&#xff0c;其云端部署和应用大多数都是基于fastapi框架。所以掌握和理解fastapi框架基本代码和用法尤显重要。 需要注意的是&#xff0c;fastapi主要是通过app对象提供了web服务端的实现代…