当前位置: 首页 > news >正文

acwing算法提高之图论--SPFA找负环

目录

  • 1 介绍
  • 2 训练

1 介绍

本专题用来记录使用spfa算法来求负环的题目。

2 训练

题目1:904虫洞

C++代码如下,

#include <cstring>
#include <iostream>
#include <algorithm>
#include <queue>using namespace std;typedef pair<int, int> PII;const int N = 510;
int n, m, w;
int dist[N], cnt[N];
bool st[N]; //st[i]表示结点i是否在队列中
vector<vector<PII>> g;void spfa() {queue<int> q;for (int i = 1; i <= n; ++i) {q.push(i);st[i] = true;}while (!q.empty()) {auto t = q.front();q.pop();st[t] = false;for (auto [b, w] : g[t]) {if (dist[b] > dist[t] + w) {dist[b] = dist[t] + w;cnt[b] = cnt[t] + 1;if (!st[b]) {q.push(b);}if (cnt[b] >= n) {cout << "YES" << endl;return;}}}}cout << "NO" << endl;return;
}int main() {int T;cin >> T;while (T--) {cin >> n >> m >> w;g.clear();g.resize(n + 10);for (int i = 0; i < m; ++i) {int a, b, c;cin >> a >> b >> c;g[a].emplace_back(b, c);g[b].emplace_back(a, c);}for (int i = 0; i < w; ++i) {int a, b, c;cin >> a >> b >> c;g[a].emplace_back(b, -c);}memset(cnt, 0, sizeof cnt);spfa();}return 0;
}

题目2:361观光奶牛

01分数规划!

C++代码如下,

#include <iostream>
#include <cstring>
#include <algorithm>
#include <queue>using namespace std;typedef pair<int, double> PID;const int N = 1010, M = 5010;
int n, m;
double v[N];
double dist[N];
int cnt[N];
bool st[N];struct Edge {int a, b;double w;
}edges[M];vector<vector<PID>> g;bool check(double mid) {g.clear();g.resize(n + 10);for (int i = 1; i <= n; ++i) { //初始化相关数组st[i] = false;cnt[i] = 0;dist[i] = 0.0;}for (int i = 0; i < m; ++i) {int a = edges[i].a, b = edges[i].b;double w = edges[i].w;//结点的权重加入到出边上w = mid * w - v[a];g[a].emplace_back(b, w);}queue<int> q;for (int i = 1; i <= n; ++i) {q.push(i);st[i] = true;}while (!q.empty()) {auto a = q.front();q.pop();st[a] = false;for (auto [b, w] : g[a]) {if (dist[b] > dist[a] + w) {dist[b] = dist[a] + w;cnt[b] = cnt[a] + 1;if (!st[b]) {q.push(b);}if (cnt[b] >= n) {return true;}}}}return false;
}int main() {cin >> n >> m;for (int i = 1; i <= n; ++i) cin >> v[i]; //每个结点的权重for (int i = 0; i < m; ++i) {cin >> edges[i].a >> edges[i].b >> edges[i].w;} double l = 0, r = 1000;while (abs(l - r) > 1e-8) {double mid = (l + r) / 2.0;if (check(mid)) {//true,存在图中存在一个环使得比值大于midl = mid;} else {r = mid;}//cout << "l = " << l << ", r = " << r << endl;}printf("%.2lf", l);return 0;
}

题目3:1165单词环

C++代码如下,

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>using namespace std;const int N = 700, M = 100010;int n;
int h[N], e[M], w[M], ne[M], idx;
double dist[N];
int q[N], cnt[N];
bool st[N];void add(int a, int b, int c) {e[idx] = b, w[idx] = c, ne[idx] = h[a], h[a] = idx++;
}bool check(double mid) {memset(st, 0, sizeof st);memset(cnt, 0, sizeof cnt);int hh = 0, tt = 0;for (int i = 0; i < 676; ++i) {q[tt++] = i;st[i] = true;}int count = 0;while (hh != tt) {int t = q[hh++];if (hh == N) hh = 0;st[t] = false;for (int i = h[t]; ~i; i = ne[i]) {int j = e[i];if (dist[j] < dist[t] + w[i] - mid) {dist[j] = dist[t] + w[i] - mid;cnt[j] = cnt[t] + 1;if (++count > 10000) return true; //trickif (cnt[j] >= N) return true;if (!st[j]) {q[tt++] = j;if (tt == N) tt = 0;st[j] = true;}}}}return false;
}int main() {char str[1010];while (scanf("%d", &n), n) {memset(h, -1, sizeof h);idx = 0;for (int i = 0; i < n; ++i) {scanf("%s", str);int len = strlen(str);if (len >= 2) {int left = (str[0] - 'a') * 26 + (str[1] - 'a');int right = (str[len-2] - 'a') * 26 + (str[len-1] - 'a');add(left, right, len);}}if (!check(0)) puts("No solution");else {double l = 0, r = 1000;while (r - l > 1e-4) {double mid = (l + r) / 2;if (check(mid)) l = mid;else r = mid;}printf("%.2lf\n", r);}}return 0;
}

相关文章:

acwing算法提高之图论--SPFA找负环

目录 1 介绍2 训练 1 介绍 本专题用来记录使用spfa算法来求负环的题目。 2 训练 题目1&#xff1a;904虫洞 C代码如下&#xff0c; #include <cstring> #include <iostream> #include <algorithm> #include <queue>using namespace std;typedef p…...

I2C驱动实验:测试I2C驱动是否与设备匹配

一. 简介 前面一篇文章在设备树中创建 ap3216c设备节点信息。 第二篇文章编写了简单的 I2C设备驱动框架&#xff0c;包括 构造 i2c_driver结构体&#xff0c;i2c_driver的注册与注销等。文章如下&#xff1a; I2C驱动实验&#xff1a;向设备树添加 I2C设备的设备节点信息-C…...

5560.树的直径

蛮不错的一道题目&#xff0c;你要利用树的性质分析出&#xff0c;你只需要维护上一次的树的直径的两个端点就好了 #include<iostream>using namespace std; using ll long long; using pii pair<int,int>; const int N 6e510; const int inf 0x3f3f3f3f; cons…...

Decoupled Multimodal Distilling for Emotion Recognition 论文阅读

Decoupled Multimodal Distilling for Emotion Recognition 论文阅读 Abstract1. Introduction2. Related Works2.1. Multimodal emotion recognition2.2. Knowledge distillation3. The Proposed Method3.1. Multimodal feature decoupling3.2. GD with Decoupled Multimodal …...

【css】使用display:inline-block后,元素间存在4px的间隔

问题&#xff1a;在本地项目中使用【display: inline-block】&#xff0c;元素间存在4px间隔。打包后发布到外网又不存在这个问题了。 归根结底这是一个西文排版的问题&#xff0c;英文有空格作为词分界&#xff0c;而中文则没有。 此时的元素具有文本属性&#xff0c;只要标签…...

代码执行漏洞

原理&#xff1a;没有对接口输入的内容进行严格的判断 造成攻击者精心构造的代码非法执行 当应用在调用一些能将字符转化为代码的函数(如PHP中的eval)时&#xff0c;没有考虑用户是否能控 制这个字符串&#xff0c;这就会造成代码执行漏洞。 相 关 函 数 &#xff1a; PHP&…...

SQLServer2022安装

首先从官网上下载2022版本SQL Server 下载 | Microsoft 选择此把呢不能运行&#xff0c;适合我们在学习阶段使用。 同时网页往下滑动&#xff0c;下载SSMS 下载后的文件 注意&#xff1a;在运行时最好获取管理员权限运行&#xff0c;第一次在安装时未获取管理员权限最终…...

vue2 配置@指向src

使用的是vue cli创建的项目。 1.安装 path 如果在 Node.js 环境中运行代码&#xff0c;path 模块默认是可用的&#xff0c;则不需要单独安装&#xff0c;否则输入下面命令安装path npm i path -S 2.找到vue.config.js文件&#xff1a; const { defineConfig } require(vue/…...

用友U9 存在PatchFile.asmx接口任意文件上传漏洞

声明&#xff1a; 本文仅用于技术交流&#xff0c;请勿用于非法用途 由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失&#xff0c;均由使用者本人负责&#xff0c;文章作者不为此承担任何责任。 简介 用友U9是由中国用友软件股份有限公司开发的一款企业…...

如何卸载干净 IDEA(图文讲解)

更新时间 2022-12-20 11:一则或许对你有用的小广告 星球 内第一个项目&#xff1a;全栈前后端分离博客项目&#xff0c;演示地址&#xff1a;Weblog 前后端分离博客, 1.0 版本已经更新完毕&#xff0c;正在更新 2.0 版本。采用技术栈 Spring Boot Mybatis Plus Vue 3.x Vit…...

自动化运维(十)Ansible 之进程管理模块

Ansible的进程管理模块提供了一种强大而灵活的方式来管理和操作各种进程管理器和服务。无论你使用的是Supervisor、Systemd、传统的init脚本还是Runit,这些模块都可以帮助你轻松地管理服务的生命周期。通过合理地使用这些模块,你可以实现服务的自动化管理,提高系统的可靠性和稳…...

【leetcode279】完全平方数,动态规划解法

原问题&#xff1a;给定一个非负整数n&#xff0c;如果把它视作一些完全平方数的和&#xff0c;那么最少需要多少个完全平方数&#xff1f; 这次学习到一个热心网友的解法&#xff1a;把问题转化兑换零钱问题&#xff0c;然后使用动态规划求解。 比如&#xff0c;给定 n12, 那…...

Java 元素排序(数组、List 集合)

数组元素排序 升序 int[] array {3, 1, 4, 5}; Arrays.sort(array);// 升序排序 System.out.println(Arrays.toString(array)); //输出&#xff1a;[1, 3, 4, 5]降序 可以先将数组元素存入 List 集合&#xff0c;然后集合元素逆序&#xff0c;最后将集合元素写回原数组。&a…...

使用vite创建一个react18项目

一、vite是什么&#xff1f; vite 是一种新型前端构建工具&#xff0c;能够显著提升前端开发体验。它主要由两部分组成&#xff1a; 一个开发服务器&#xff0c;它基于原生 ES 模块提供了丰富的内建功能&#xff0c;如速度快到惊人的模块热更新&#xff08;HMR&#xff09;。 …...

子集(迭代)(leetcode 78)

核心逻辑&#xff1a; 根据子数组包含的元素个数迭代&#xff1a; 现有子集的基础上通过添加这个新元素来翻倍子集的数量 f(n)2f(n−1) vector<vector<int>> subsets(vector<int>& nums) {vector<vector<int>> ans;int i,j,k;ans.p…...

汽车疲劳测试试验平台技术要求(北重厂家)

汽车疲劳测试试验平台技术要求通常包括以下几个方面&#xff1a; 车辆加载能力&#xff1a;测试平台需要具备足够的承载能力&#xff0c;能够同时测试多种车型和不同重量的车辆。 动力系统&#xff1a;测试平台需要具备稳定可靠的动力系统&#xff0c;能够提供足够的力和速度来…...

Redis -- 缓存雪崩问题

缓存雪崩是指在同一时段大量的缓存key同时失效或者Redis服务宕机&#xff0c;导致大量请求到达数据库&#xff0c;带来巨大压力。 可能原因 : 同一时间大量的key到期 ; 解决方案&#xff1a; 给不同的Key的TTL添加随机值 利用Redis集群提高服务的可用性 给缓存业务添加降…...

【ARM 嵌入式 C 文件操作系列 20 -- 文件删除函数 remove 详细介绍】

请阅读【嵌入式开发学习必备专栏 】 文章目录 文件删除函数 remove 文件删除函数 remove 在 C 语言中&#xff0c; 可以使用 remove 函数来删除一个文件&#xff0c;但在删除之前 可能想确认该文件是否存在。 可以使用 stat 函数来检查文件是否存在。 以下是如何实现这个功能…...

LeetCode刷题之31.下一个排列

文章目录 1. 题目2.分析3.解答3.1 先排序&#xff0c;后交换3.2 先交换&#xff0c;后排序 1. 题目 整数数组的一个 排列 就是将其所有成员以序列或线性顺序排列。 例如&#xff0c;arr [1,2,3] &#xff0c;以下这些都可以视作 arr 的排列&#xff1a;[1,2,3]、[1,3,2]、[3…...

【RISC-V 指令集】RISC-V 向量V扩展指令集介绍(九)- 向量定点算术指令

1. 引言 以下是《riscv-v-spec-1.0.pdf》文档的关键内容&#xff1a; 这是一份关于向量扩展的详细技术文档&#xff0c;内容覆盖了向量指令集的多个关键方面&#xff0c;如向量寄存器状态映射、向量指令格式、向量加载和存储操作、向量内存对齐约束、向量内存一致性模型、向量…...

实测推荐!2026年毕业论文5000字范文免费下载AI写作工具排行,查重降AI率全攻略

本文由知学术AIPaperGPT内容团队实测撰写 2026-05-11实测推荐&#xff01;2026年毕业论文5000字范文免费下载AI写作工具排行&#xff0c;查重降AI率全攻略又是一年毕业季&#xff0c;无数本科、硕士生正为毕业…...

Taotoken模型广场如何帮助开发者快速选型,对比主流模型特性

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 Taotoken模型广场如何帮助开发者快速选型&#xff0c;对比主流模型特性 对于需要接入大模型能力的开发者而言&#xff0c;面对市场…...

5个Zutilo技巧让你成为Zotero文献管理高手

5个Zutilo技巧让你成为Zotero文献管理高手 【免费下载链接】Zutilo Zotero plugin providing some additional editing features 项目地址: https://gitcode.com/gh_mirrors/zu/Zutilo 还在为Zotero的批量操作烦恼吗&#xff1f;每天面对成百上千的文献条目&#xff0c;…...

AI编程助手配置统一管理:code-agnostic实现多编辑器配置同步

1. 项目概述&#xff1a;告别配置碎片化&#xff0c;一个中心管理所有AI编辑器如果你和我一样&#xff0c;同时在使用Cursor、OpenCode、Codex甚至Claude Code这些AI编程助手&#xff0c;那你一定对配置管理的混乱深有体会。每个编辑器都有一套自己的配置格式和存放位置&#x…...

Cyberpunk 2077存档编辑器:终极免费工具完整使用指南

Cyberpunk 2077存档编辑器&#xff1a;终极免费工具完整使用指南 【免费下载链接】CyberpunkSaveEditor A tool to edit Cyberpunk 2077 sav.dat files 项目地址: https://gitcode.com/gh_mirrors/cy/CyberpunkSaveEditor 你是否想要在《赛博朋克2077》中拥有无限可能&a…...

中国行政区划数据生成器:开发者的地理数据基础设施解决方案

中国行政区划数据生成器&#xff1a;开发者的地理数据基础设施解决方案 【免费下载链接】chinese-address-generator 中国地址生成器 - 三级地址 四级地址 随机生成完整地址 项目地址: https://gitcode.com/gh_mirrors/ch/chinese-address-generator 在现代软件开发过程…...

跨平台文件自由:Free-NTFS-for-Mac 终极解决方案深度解析

跨平台文件自由&#xff1a;Free-NTFS-for-Mac 终极解决方案深度解析 【免费下载链接】Free-NTFS-for-Mac Nigate: An open-source NTFS utility for Mac. It supports all Mac models (Intel and Apple Silicon), providing full read-write access, mounting, and management…...

Vivado里配置RFSoC数据转换器IP,这10个参数新手最容易搞错(附PG269避坑指南)

Vivado中RFSoC数据转换器IP配置的10个关键参数解析与实战避坑指南 第一次在Vivado中配置RFSoC的数据转换器IP核时&#xff0c;面对密密麻麻的参数选项&#xff0c;即使是经验丰富的FPGA工程师也可能感到无从下手。RFSoC作为集成了高速数据转换器的异构计算平台&#xff0c;其配…...

魔兽争霸3现代兼容性终极解决方案:WarcraftHelper深度优化指南

魔兽争霸3现代兼容性终极解决方案&#xff1a;WarcraftHelper深度优化指南 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper 魔兽争霸3作为经典即时战略…...

PCL圆柱拟合进阶:从模型参数到完整轴线的精准计算

1. PCL圆柱拟合的核心挑战与工业需求 在工业测量和逆向工程领域&#xff0c;圆柱体是最常见的几何特征之一。想象一下汽车发动机的活塞杆、液压缸的活塞筒&#xff0c;或者机械臂的旋转轴&#xff0c;这些关键部件都需要精确的圆柱几何参数。PCL&#xff08;Point Cloud Librar…...