火车停留 wiki 1035

2024-05-10 12:18
文章标签 1035 火车 wiki 停留

本文主要是介绍火车停留 wiki 1035,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

首先这题N和M都很小,可以往网络流方面想。

怎么用网络流搞呢,其实就是按题目描述搞,cost显然就是费用,而每个站台同一时间只能停一辆车,以及总站台数的限制显然就是流量,想到这里基本上脑子里已经有一个大概的模型了。

1.肯定要拆点,因为涉及到时间,不拆点不能处理时间的前后关系。

2.拆点肯定是按火车拆,因为火车可以随意选择剩下的车站,以车站为点显然不方便。

以上两点想到之后这题就基本解决了,可以着手建图了。

1.对于火车 i ,拆成两个点,i 和 i’ ,向 i‘ 连一条容量为1,费用为cost[i]的边,表示这辆火车进站停留。

2.建立一个源点S,从S向每个连一条容量为1,费用为0的边,表示这辆车为第一个进入车站停留的(由于语文不好,这里可能有点表意不清,大家稍微想一想应该就懂了)

3.建立一个汇点T,从每个i’ 向T连一条容量为1,费用为0的边,表示这辆车为最后一个出站的(同上)

4.建立一个超级汇点ST,从T向ST连一条容量为n,费用为0的边,用来限制n个车站

5.对于每个ij,若满足reach[i]+stay[i]<reach[j],就从i‘ 向 连一条容量为1,费用为0的边,表示i出站之后,j可以进同一个站

整个建图过程直观清晰。

然后做S到ST的最大费用最大流就可以了

TIPS:1.最大费用最大流可以将边的费用取反,之后用最小费用流的SPFA做,答案取反就可以了。

          2.答案别忘了除以100

我的AC代码

#include <iostream>
#include <stdio.h>
#include <string.h>
#include <queue>
#include <vector>
using namespace std;
#define INT_MAX 0x07777777
struct Edge {int from, to, cap, flow, cost;
};
int n,m,sz,s,t,result;
vector<Edge> edges;
vector<int> G[300];
int inq[300],a[300],d[300],reach[300],cost[300],stay[300],node[300],p[300];
void add(int from, int to, int cap, int cost){edges.push_back(Edge{from,to,cap,0,cost});edges.push_back(Edge{to,from,0,0,-cost});int count = edges.size();G[from].push_back(count-2);G[to].push_back(count-1);
}
void init(){scanf("%d%d", &n,&m);for(int i = 0; i < m; i++){scanf("%d%d%d", &reach[i], &cost[i], &stay[i]);cost[i] = -cost[i];}add(0, 1, n, 0);sz = 2;for(int i = 0; i < m; i++){node[i] = sz;add(1, sz, 1, 0);sz++;add(sz-1,sz,1,cost[i]);sz++;}for(int i = 0; i < m; i++){add(node[i]+1, sz, 1, 0);}sz++;t = sz-1;for(int i = 0; i < m; i++){for(int j = 0; j < m; j++){if(i!=j && reach[i]+stay[i]<reach[j]){add(node[i]+1, node[j], 1, 0);}}}
}
void solve(){result = 0;memset(a, 0, sizeof(a));a[0] = INT_MAX;while (true) {memset(inq, 0, sizeof(inq));inq[0] = 1;for(int i = 0; i < 300; i++) d[i] = INT_MAX;d[0] = 0;queue<int> q;q.push(0);while (!q.empty()) {int u = q.front();q.pop();inq[u] = 0;for(int i = 0; i < G[u].size(); i++){Edge& e = edges[G[u][i]];if (d[e.to] > d[e.from]+e.cost && e.cap > e.flow) {d[e.to] = d[e.from]+e.cost;a[e.to] = (a[u] < e.cap-e.flow ? a[u] : e.cap-e.flow);p[e.to] = G[u][i];if(!inq[e.to]) {q.push(e.to); inq[e.to] = 1;}}}}if (d[t]==INT_MAX) break;int u = t;while (u) {edges[p[u]].flow += a[t];edges[p[u]^1].flow -= a[t];u = edges[p[u]].from;}result += a[t]*d[t];}printf("%.2f\n", -(((double)result))/100);
}
int main(int argc, const char * argv[])
{init();solve();
}


这篇关于火车停留 wiki 1035的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/976420

相关文章

基于Spring Boot的火车订票管理系统

你好呀,我是计算机学姐码农小野!如果有相关需求,可以私信联系我。 开发语言:Java 数据库:MySQL 技术:JAVA语言 + Spring Boot框架 工具:IDEA/Eclipse、Navicat、Tomcat 系统展示 首页 管理员界面 用户购票 订单管理 摘要 随着网络技术的不断发展,火车订票管理系统逐渐由传统的线下操作转变为线上服

Tomcat启动时一直停留在一个应用的发布的解决办法

Tomcat在启动时一直停留在某一个应用无法启动或者需要很长时间才能启动,提示Deploying web application directory [/home/dev/tomcat/apache-tomcat-9.0.0.M26/webapps/ROOT,可以通过如下配置来加速启动 配置 修改${JAVA_HOME}/jre/lib/security/java.security文件

centos7 【项目部署篇】搭建一套wiki知识库系统

本文详细介绍了 如何在LinuxCentOS7.9环境下搭建mm-wiki知识库系统,包括环境要求、下载安装包、上传至服务器、启动安装服务。 0.环境要求 宝塔直接部署基础环境 LAMP https://www.bt.cn/new/download.html Centos7 直接执行 yum install -y wget && wget -O install.sh https://dow

wiki.js 部署

1 前言 找了许久的个人知识库系统,迟迟没有动作。经过了解后感觉wiki.js还不错,这个系列文章详细描述一下全过程。 wifi.js可以满足我的以下要求: 支持文档在线编辑支持二进制文件上传和下载支持历史记录和回滚支持用户账号分权支持数据和nas同步 这个系列打算用三个篇章来描述,分别是部署和使用以及迁移。 本篇文章是wifi.js系列的第一篇,wifi.js部署 参考: 1. W

1hdu022数据结构堆栈-火车进站

/*判断一串序列能否按照堆栈的方式,进出栈之后得到另外一组序列*/ /*要把题目当做已知进出序列进行对比*/ #include<iostream>#include<cstdio>#include<cstring>using namespace std;struct node{char st[4];}str[10000];int main(){int n,i,j,t,k,ok

代码随想录算法训练营四十三天|1143.最长公共子序列、1035.不相交的线、53.最大子序和、392.判断子序列

题目链接:1143. 最长公共子序列 - 力扣(LeetCode) 思路: 如果text1[i - 1] 与 text2[j - 1]相同,那么找到了一个公共元素,所以dp[i][j] = dp[i - 1][j - 1] + 1; 如果text1[i - 1] 与 text2[j - 1]不相同,那就看看text1[0, i - 2]与text2[0, j - 1]的最长公共子序列 和 t

PyQt5 更换托盘图标以及设置鼠标停留提示

在PyQt5中,处理系统托盘(通常称为“通知区域”或“系统托盘”)图标的鼠标停留提示以及更换图标是一个相对直接的过程。这主要通过QSystemTrayIcon类实现。以下是如何做到这两点的步骤: 1. 初始化系统托盘图标 首先,你需要创建一个QSystemTrayIcon实例,并为其设置一个初始图标。 from PyQt5.QtWidgets import QApplication, QSy

搭建一个私有的知识库mm-wiki

文章目录 前言一、mm-wiki二、安装步骤下载安装 总结 前言 一般公司内部想要记录一些东西,都需要一个共享文档,当然可以选择类似比较简单易用的,有道云笔记,腾讯文档,语雀等,但是肯定有些公司是保密的,所以不希望这些数据被泄露,当然选择本地存储是最安全的~ 一、mm-wiki 对于程序员而言,当然习惯了markdown方式的文档记录方式,那么这款开源的笔记可以说是比

css3 动画停留在最后一帧

html:<p class="test">哈哈</p> css: .test{width: 200px;height: 200px; animation:bj 1s linear forwards;background:

gradle是什么,新建工程停留在building gradle project info,gradle最新版本下载

gradle提供了什么(From百科)   1.一种可切换的,像maven一样的基于约定的构建框架,却又从不锁住你(约定优于配置) Switchable, build-by-convention frameworks a la Maven. But we never lock you in! 2. 强大的支持多工程的构建 3. 强大的依赖管理(基于Apache Iv