1018 Public Bike Management (30 分)(图的遍历and最短路径)

这题不能直接在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最短路径)的更多相关文章
- 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 ...
- 1018 Public Bike Management (30 分)
There is a public bike service in Hangzhou City which provides great convenience to the tourists fro ...
- 1018 Public Bike Management (30分) 思路分析 + 满分代码
题目 There is a public bike service in Hangzhou City which provides great convenience to the tourists ...
- 1018 Public Bike Management (30分) PAT甲级真题 dijkstra + dfs
前言: 本题是我在浏览了柳神的代码后,记下的一次半转载式笔记,不经感叹柳神的强大orz,这里给出柳神的题解地址:https://blog.csdn.net/liuchuo/article/detail ...
- 1018 Public Bike Management (30分) (迪杰斯特拉+dfs)
思路就是dijkstra找出最短路,dfs比较每一个最短路. dijkstra可以找出每个点的前一个点, 所以dfs搜索比较的时候怎么处理携带和带走的数量就是关键,考虑到这个携带和带走和路径顺序有关, ...
- 【PAT甲级】1018 Public Bike Management (30 分)(SPFA,DFS)
题意: 输入四个正整数C,N,S,M(c<=100,n<=500),分别表示每个自行车站的最大容量,车站个数,此次行动的终点站以及接下来的M行输入即通路.接下来输入一行N个正整数表示每个自 ...
- 1018 Public Bike Management (30)(30 分)
时间限制400 ms 内存限制65536 kB 代码长度限制16000 B There is a public bike service in Hangzhou City which provides ...
- 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 ...
- 1018. Public Bike Management (30)
时间限制 400 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue There is a public bike service i ...
- PAT A 1018. Public Bike Management (30)【最短路径】
https://www.patest.cn/contests/pat-a-practise/1018 先用Dijkstra算出最短路,然后二分答案来验证,顺便求出剩余最小,然后再从终点dfs回去求出路 ...
随机推荐
- CSS3 小会
-webkit-perspective:800px; 其子元素获得3D元素支持,这里是设置子元素距离试图的位置:若设为0 则不支持子元素获得3d效果,不支持透视. 常与transform:rota ...
- 全局变量&局部变量&Static存储&Register变量
1.局部变量 局部变量也称为内部变量.局部变量是在函数内作定义说明的.其作用域仅限于函数内:函数的形参就是局部变量: 2.全局变量 全局变量也称为外部变量,它是在函数外部定义的变量.全局变量的说明符为 ...
- CentOS 7 下 Oracle 11g 安装教程
一.准备工作 1.关闭selinux 查看selinux状态: getenforce或者sestatus -v 临时关闭: setenforce 0 永久关闭: vim /et ...
- js关于if(''==0)
在js当中,如下注意 if(''==0){ alert("空字符代表false"); } 空字符串代表false 0代表false false==false 结果就为true了
- BZOJ1607: [Usaco2008 Dec]Patting Heads 轻拍牛头(模拟 调和级数)
Time Limit: 3 Sec Memory Limit: 64 MBSubmit: 3031 Solved: 1596[Submit][Status][Discuss] Descriptio ...
- SAP HCM 前台字段显示与隐藏
https://blog.csdn.net/qq_29475437/article/details/82107452 1.在hcm屏幕上 确定 程序名称 与屏幕编号 2.SM30 输入 T588M,如 ...
- 解决ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)【亲测有效】
文件转自:https://blog.csdn.net/hua1011161696/article/details/80666025 问题:(MySQL 5.6社区版windows版) 忘记密码或其他一 ...
- 【shell脚本学习-2】
#!/bin/bash - #echo do you have exetuate this project \n printf "please input your passwd" ...
- Phpstrom开发工具
下载地址 https://www.jetbrains.com/zh/phpstorm/specials/phpstorm/phpstorm.html?utm_source=baidu&utm_ ...
- flask 中访问时后台错误 error: [Errno 32] Broken pipe
解决办法:app.run(threaded=True) 个人理解:flask默认单线程,访问一个页面时会访问到很多页面,比如一些图片,加入参数使其为多线程