1018 Public Bike Management 结题记录(dfs剪枝)

个人觉得直接放入代码是最管用的。
其他方法类似,题意请参考其他博主。

#include <bits/stdc++.h>
using namespace std;
const int N = 1e4 + 50;int maxn = 2000000000;
int c, n, ed, s[N], m, minlen, needn, backn, pre[N];
bool flag, book[N];
vector<pair<int, int > > e[N];inline void dfs(int u, int points, int maxneed, int stores, int len)
{if (len > minlen) return ;int nd = points * c / 2 - stores;maxneed = max(maxneed, max(0, nd));if (u == ed) {int tneedn, tbackn;if (nd <= 0) {// dont needtneedn = maxneed; tbackn = -nd + maxneed;} else {// need;tneedn = max(maxneed, nd); tbackn = 0;}if (len == minlen) {if (needn > tneedn || (needn == tneedn && backn > tbackn)) {needn = tneedn; backn = tbackn;} } else if (minlen > len) {minlen = len; needn = tneedn; backn = tbackn;}return ;}for (int i = 0; i < e[u].size(); i++) {int v = e[u][i].first, w = e[u][i].second;if (book[v]) continue;book[v] = true;dfs(v, points + 1, maxneed, stores + s[v], len + w);book[v] = false;}
}inline void dfs2(int u, int points, int maxneed, int stores, int len)
{if (flag) return ;if (len > minlen) return ;int nd = points * c / 2 - stores;maxneed = max(maxneed, max(0, nd));if (u == ed) {int tneedn, tbackn;if (nd <= 0) {// dont needtneedn = maxneed; tbackn = -nd + maxneed;} else {// need;tneedn = max(maxneed, nd); tbackn = 0;}if (len == minlen) {if (tneedn == needn && tbackn == backn) {// puts("test 1");flag = true;}} return ;}for (int i = 0; i < e[u].size(); i++) {int v = e[u][i].first, w = e[u][i].second;if (book[v]) continue;book[v] = true;pre[v] = u;dfs2(v, points + 1, maxneed, stores + s[v], len + w);if (flag) return ;book[v] = false;}
}signed main()
{scanf("%d%d%d%d", &c, &n, &ed, &m);for (int i = 1; i <= n; i++) scanf("%d", &s[i]);while (m--) {int u, v, w; scanf("%d%d%d", &u, &v, &w);e[u].push_back({v, w});e[v].push_back({u, w});}minlen = maxn, needn = maxn, backn = maxn;book[0] = true;dfs(0, 0, 0, 0, 0);// printf("%d %d %d\n", minlen, needn, backn);memset(book, 0, sizeof book);book[0] = true;dfs2(0, 0, 0, 0, 0);vector<int > res;while (ed != 0) {res.push_back(ed); ed = pre[ed];}printf("%d %d", needn, 0);for (int i = res.size() - 1; i >= 0; i--) {printf("->%d", res[i]);}printf(" %d\n", backn);return 0;
}

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

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

相关文章

【Vue3】组件递归

【Vue3】组件递归 实现效果 通过传入一个数字&#xff0c;实现数字次循环 父组件 <script setup> import { ref } from "vue"; import RecursionMe from "./components/RecursionMe/index.vue";const level ref(0);const add () > level.val…

RocketMQ入门

安装 官网 https://rocketmq.apache.org/zh/docs/4.x/introduction/02quickstart 下载 https://archive.apache.org/dist/rocketmq/4.9.4/rocketmq-all-4.9.4-source-release.zip 解压后上传 启动NameServer 修改runserver.sh&#xff0c;分配内存如果比系统高会导致启动…

【MySQL】基础语法总结

MySQL 基础语句 一、DDL 数据库定义语言 1.1CREATE 创建 1.1.1 创建数据库 语法结构 CREATE DATABASE database_name;示例 CREATE DATABASE demo;1.1.2 创建表 语法结构 CREATE TABLE 表名 (列1 数据类型,列2 数据类型,... );示例 CREATE TABLE new_user (id INT PRIMARY KE…

Apifox-比postman更优秀的接口自动化测试平台

一、Apifox介绍 Apifox 是 API 文档、API 调试、API Mock、API 自动化测试一体化协作平台&#xff0c;定位 Postman Swagger Mock JMeter。通过一套系统、一份数据&#xff0c;解决多个系统之间的数据同步问题。只要定义好 API 文档&#xff0c;API 调试、API 数据 Mock、AP…

学习使用Scrapy框架进行高效的爬取,了解其基本结构和使用方法

Scrapy是一个用Python编写的开源网络爬虫框架&#xff0c;它可以帮助开发者快速高效地从网页中提取数据。下面是使用Scrapy进行爬取的基本结构和使用方法的概述&#xff1a; 安装Scrapy&#xff1a;首先&#xff0c;确保你已经安装了Python和pip。然后可以通过运行以下命令来安…

画流程图都可以用哪些工具?

在日常生活中&#xff0c;我相信我们很多人都看到过流程图。对于设计师来说&#xff0c;它还需要涉及流程图来反映用户的旅程和交互方式。那么你知道哪些流行的流程图设计软件呢&#xff1f;作为高级设计师&#xff0c;我今天推荐10款流程图设计软件。你可以和我一起读这篇文章…

SpringBoot入门教程:Java执行Python脚本文件

java执行Python有多种方式,可以使用Java原生API,也可以使用第三方库,使用Java原生的API方式能够支持执行的Python脚本中import第三方依赖。 一:Java @RequestMapping("/exec") public String exec() {try {// args[0]: python, 如果没有配置环境变量需要指定绝…

微信小程序ios下,border显示不全兼容问题解决

小程序在ios系统中&#xff0c;如果border小于1px的情况下&#xff0c;border就可能显示不全(可能少了上下左右任意一边) 只需要加一个::after或::before伪类&#xff0c;使用绝对定位定在原来元素上边就不会产生问题了&#xff01; .d_card_line1_tag {padding: 1rpx 14rpx;…

DEAP库文档教程三-----创建类型

本节将继续展示如何通过creator创建类型以及如何使用toolbox如何对复杂问题进行初始化。 Particle的初始化--粒子初始化 一个Particle是另一个特殊类型的个体&#xff0c;这是因为通常情况下它有一个速度&#xff0c;并且有一个最优的位置需要去记忆。这种类型个体的创建与通…

【实训项目】传道学习助手APP设计

1.设计摘要 跨入21世纪以来,伴随着时代的飞速发展&#xff0c;国民对教育的重视度也有了进一步的提升。我们不难发现虽然很多学习内容有学习资料或者答案&#xff0c;但是这些内容并不能达到让所有求学的人对所需知识进行完全地理解与掌握。所以我们需要进行提问与求助。那么一…

【数学建模套话以及常用数词】——永久更新

目录索引 数值词&#xff1a;图与表&#xff1a;套话&#xff1a;注意事项&#xff1a;模型假设&#xff1a;经验积累&#xff1a; 数值词&#xff1a; 方差、均值、差值、百分比率 图与表&#xff1a; 记得画流程图、思维导图记得取消图片的首行缩进后再点击居中 套话&#xf…

国产自主可控C++工业软件可视化图形架构源码

关于国产自主代替的问题是当前热点&#xff0c;尤其是工业软件领域。 “一个功能强大的全自主C跨平台图形可视化架构对开发自主可控工业基础软件至关重要&#xff01;” 作为全球领先的C工业基础图形可视化软件提供商&#xff0c;UCanCode软件有自己的思考&#xff0c;我们认…

学习设计模式之建造者模式,但是宝可梦

前言 作者在准备秋招中&#xff0c;学习设计模式&#xff0c;做点小笔记&#xff0c;用宝可梦为场景举例&#xff0c;有错误欢迎指出。 建造者模式 建造者模式是一种创建型模式&#xff0c;主要针对于某一个类有特别繁杂的属性&#xff0c;并且这些属性中有部分不是必须的。…

Unity实现倒计时和获取系统时间

一:创建UGUI 1.创建Canvas画布组件,调节Canvas画布的分辨率等其他设置。我们可以把视图设置为2D模式下。 2.创建Text文本组件,取名为Timer计时器,我们调整Text文本组件的大小,用锚点设置Text文本组件的位置,并且设置好Text文本组件的颜色。 3.我们再创建一个Text文…

uniapp 存储base64资源为http链接图片

1. 新建一个base64.js 文件 const fsm wx.getFileSystemManager(); // base64data base64资源 // name 文件名 function base64src(base64data, name, cb) {const time new Date().getTime();const filePath ${wx.env.USER_DATA_PATH}/${name}.${time}.png;const buffer …

微服务架构|go-zero 的自适应熔断器

原文链接&#xff1a; go-zero 的自适应熔断器 上篇文章我们介绍了微服务的限流&#xff0c;详细分析了计数器限流和令牌桶限流算法&#xff0c;这篇文章来说说熔断。 熔断和限流还不太一样&#xff0c;限流是控制请求速率&#xff0c;只要还能承受&#xff0c;那么都会处理&…

网络编程day3-FTP客户端项目

FTP协议 FTP 的独特的优势同时也是与其它客户服务器程序最大的不同点就在于它在两台通信的主机之间使用了两条 TCP 连接&#xff0c;一条是数据连接&#xff0c;用于数据传送&#xff1b;另一条是控制连接&#xff0c;用于传送控制信息&#xff08;命令和响应&#xff09;&…

C# 多线程交替按照指定顺序执行

1.关于AutoResetEvent和ManualResetEvent的区别解释如下&#xff1a; AutoResetEvent和ManualResetEvent是.NET中的两个线程同步类。它们之间的主要区别在于其释放信号的方式以及对等待线程的影响。 AutoResetEvent的作用是在等待的线程被信号唤醒后&#xff0c;将信号自动重…

TLS-对称加密和非对称加密

对称加密算法和非对称加密算法 对称加密算法就是使用对称密钥对数据加密的算法&#xff1b; 非对称加密算法就是使用公钥加密&#xff0c;私钥解密的加密算法。 对称密钥又是如何生成的 TLS的四次握手过程 第一次&#xff1a; 1&#xff0c;TLS的版本&#xff0c;2&#xf…

Rust 学习笔记(持续更新中…)

一、 编译和运行是单独的两步 运行 Rust 程序之前必须先编译&#xff0c;命令为&#xff1a;rustc 源文件名 - rustc main.rs编译成功之后&#xff0c;会生成一个二进制文件 - 在 Windows 上还会生产一个 .pdb 文件 &#xff0c;里面包含调试信息Rust 是 ahead-of-time 编译的…