这题不能直接在Dijkstra中写这个第一 标尺和第二标尺的要求 因为这是需要完整路径以后才能计算的  所以写完后可以在遍历

#include<bits/stdc++.h>

using namespace std;
int cmax,n,v,m;
const int N=1e3;
int weight[N];
int mp[N][N];
const int inf=0x3f3f3f3f;
int dis[N];
int vis[N];
vector<int>path[N];
void Dijkstra()
{
fill(dis,dis+N,inf);
fill(vis,vis+N,false);
for(int i=;i<=n;i++) dis[i]=mp[][i];
dis[]=;
for(int i=;i<n;i++){
int u=-;
int minn=inf;
for(int j=;j<=n;j++){
if(!vis[j]&&minn>dis[j]){
minn=dis[j];
u=j;
}
}
vis[u]=true;
for(int j=;j<=n;j++){
if(!vis[j]&&dis[j]>=mp[u][j]+dis[u]){
if(dis[j]>mp[u][j]+dis[u]){
dis[j]=mp[u][j]+dis[u];
path[j].clear();
path[j].push_back(u);
}
else if(dis[j]==mp[u][j]+dis[u]){
path[j].push_back(u);
}
}
}
}
}
vector<int>t,tt;
int minNeed=inf;
int minRemain=inf;
void dfs(int v)
{
if(v==){
t.push_back(v);
int need=;//需要从0点带的车数
int remain=;//需要带回0点的车数
for(int i=t.size()-;i>=;i--){//必须倒着枚举
int id=t[i];
if(weight[id]>){// >0 说明需要带走一部分自行车
remain+=weight[id];
}
else{//需要补给
if(remain>abs(weight[id])){
remain-=abs(weight[id]);
}
else{
need+=abs(weight[id])-remain;
remain=;
}
}
}
if(need<minNeed){//第一标尺
minNeed=need;
minRemain=remain;
tt=t;
}
else if(need==minNeed&&remain<minRemain){//第二标尺
minRemain=remain;
tt=t;
}
t.pop_back();
return;
}
t.push_back(v);
for(int i=;i<path[v].size();i++){
dfs(path[v][i]);
}
t.pop_back();
}
int main()
{
scanf("%d %d %d %d",&cmax,&n,&v,&m);
fill(weight,weight+N,);
for(int i=;i<=n;i++){
int x;
scanf("%d",&x);
weight[i]=x-cmax/;
}
fill(mp[],mp[]+N*N,inf);
for(int i=;i<m;i++){
int a,b,c;
scanf("%d %d %d",&a,&b,&c);
mp[a][b]=mp[b][a]=c;
}
Dijkstra();
dfs(v);
printf("%d ",minNeed);
for(int i=tt.size()-;i>=;i--){
if(i!=tt.size()-) printf("->");
printf("%d",tt[i]);
}
printf(" %d\n",minRemain);
return ;
}

1018 Public Bike Management (30 分)(图的遍历and最短路径)的更多相关文章

  1. PAT 甲级 1018 Public Bike Management (30 分)(dijstra+dfs,dfs记录路径,做了两天)

    1018 Public Bike Management (30 分)   There is a public bike service in Hangzhou City which provides ...

  2. 1018 Public Bike Management (30 分)

    There is a public bike service in Hangzhou City which provides great convenience to the tourists fro ...

  3. 1018 Public Bike Management (30分) 思路分析 + 满分代码

    题目 There is a public bike service in Hangzhou City which provides great convenience to the tourists ...

  4. 1018 Public Bike Management (30分) PAT甲级真题 dijkstra + dfs

    前言: 本题是我在浏览了柳神的代码后,记下的一次半转载式笔记,不经感叹柳神的强大orz,这里给出柳神的题解地址:https://blog.csdn.net/liuchuo/article/detail ...

  5. 1018 Public Bike Management (30分) (迪杰斯特拉+dfs)

    思路就是dijkstra找出最短路,dfs比较每一个最短路. dijkstra可以找出每个点的前一个点, 所以dfs搜索比较的时候怎么处理携带和带走的数量就是关键,考虑到这个携带和带走和路径顺序有关, ...

  6. 【PAT甲级】1018 Public Bike Management (30 分)(SPFA,DFS)

    题意: 输入四个正整数C,N,S,M(c<=100,n<=500),分别表示每个自行车站的最大容量,车站个数,此次行动的终点站以及接下来的M行输入即通路.接下来输入一行N个正整数表示每个自 ...

  7. 1018 Public Bike Management (30)(30 分)

    时间限制400 ms 内存限制65536 kB 代码长度限制16000 B There is a public bike service in Hangzhou City which provides ...

  8. PAT Advanced 1018 Public Bike Management (30) [Dijkstra算法 + DFS]

    题目 There is a public bike service in Hangzhou City which provides great convenience to the tourists ...

  9. 1018. Public Bike Management (30)

    时间限制 400 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue There is a public bike service i ...

  10. PAT A 1018. Public Bike Management (30)【最短路径】

    https://www.patest.cn/contests/pat-a-practise/1018 先用Dijkstra算出最短路,然后二分答案来验证,顺便求出剩余最小,然后再从终点dfs回去求出路 ...

随机推荐

  1. 2018年暑假ACM个人训练题7 题解报告

    A:HDU 1060 Leftmost Digit(求N^N的第一位数字 log10的巧妙使用) B:(还需要研究一下.....) C:HDU 1071 The area(求三个点确定的抛物线的面积, ...

  2. LeetCode4.寻找两个有序数组的中位数 JavaScript

    给定两个大小为 m 和 n 的有序数组 nums1 和 nums2. 请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n)). 你可以假设 nums1 和 nums2  ...

  3. 书籍《深入理解Spring Cloud 与微服务构建》勘误、源码下载

    转载请标明出处: https://blog.csdn.net/forezp/article/details/79638403 本文出自方志朋的博客 文章勘误 错误在所难免,欢迎大家批评指正,在文章下方 ...

  4. 菜鸟崛起 Ajax

    AJAX概述 1 什么是AJAX AJAX(Asynchronous Javascript And XML)翻译成中文就是“异步Javascript和XML”.即使用Javascript语言与服务器进 ...

  5. 修改pytorch官方实例适用于自己的二分类迁移学习项目

    本demo从pytorch官方的迁移学习示例修改而来,增加了以下功能: 根据AUC来迭代最优参数: 五折交叉验证: 输出验证集错误分类图片: 输出分类报告并保存AUC结果图片. import os i ...

  6. checkbox的第三种状态--不确定状态

    视觉上,checkbox有三种状态:checked.unchecked.indeterminate(不确定的).看起来就像这样子:

  7. H5混合开发进阶

    混合开发: 原生app里面,IOS 安卓的原生app里面,嵌套h5界面. 通过原生app里的一个webView盒子进行交互.webView是原生app内置的一个XXX,里面可以放置h5界面.可以相互调 ...

  8. docker 启动 nginx 访问不了的问题

    使用版本:nginx version: nginx/1.13.8 正使用docker启动nginx容器的时候,一切都很正常,容器也起来了 docker run -dit -p 80:80 --name ...

  9. python构造二维列表以及排序字典

    1. 构造二维列表: 比如我现在需要一个100*100的二维列表: a = [] for i in range(100): a.append([]) for j in range(100): a[i] ...

  10. ko绑定----记录

    1.绑定变量 globalData = ko.observable({item:{}}); 2.绑定html ko.applyBindings(globalData, document.getElem ...