题意:

输入四个正整数C,N,S,M(c<=100,n<=500),分别表示每个自行车站的最大容量,车站个数,此次行动的终点站以及接下来的M行输入即通路。接下来输入一行N个正整数表示每个自行车站初始拥有的自行车数量,接下来输入M行每行包含三个正整数分别表示一条双向边的端点以及这条路的长度。求去往终点车站一次所经历的最短路,多条最短路则优先少带出车辆,次优先少带回车辆。(路上经过站点时需要把该站点的车辆变为最大容量的一半)

AAAAAccepted code:

 #include<bits/stdc++.h>
using namespace std;
const int inf = 1e9;
int c,n,s,m;
int a[];//每个站初始自行车数量
vector<pair<int,int> >adj[];//邻接表
int d[];//最短路距离
bool inq[];//是否在队列中的标记
vector<int>pre[];//前驱结点数组
vector<int>path,temp_path;
int sent=inf,take=inf;
void SPFA(){
queue<int>q;
for(int i=;i<=n;++i)
d[i]=inf;
q.push();
inq[]=true;
while(!q.empty()){
int u=q.front();
q.pop();
inq[u]=false;
for(int i=;i<adj[u].size();++i){
int v=adj[u][i].first;
int val=adj[u][i].second;
if(!v)
continue;
if(d[u]+val<d[v]){
d[v]=d[u]+val;
pre[v].clear();
pre[v].push_back(u);
if(!inq[v]){
q.push(v);
inq[v]=true;
}
}
else if(d[u]+val==d[v])
pre[v].push_back(u);
}
}
}
void DFS(int x){
if(!x){
int remain=,temp_sent=;
temp_path.push_back(x);
for(int i=temp_path.size()-;i>=;--i){
int u=temp_path[i];
remain+=a[u]-c/;
if(remain<){
temp_sent-=remain;
remain=;
}
}
if(temp_sent<sent){
path=temp_path;
sent=temp_sent;
take=remain;
}
else if(temp_sent==sent&&remain<take){
path=temp_path;
take=remain;
}
temp_path.pop_back();
}
temp_path.push_back(x);
for(int i=;i<pre[x].size();++i)
DFS(pre[x][i]);
temp_path.pop_back();
}
int main(){
cin>>c>>n>>s>>m;
for(int i=;i<=n;++i)
cin>>a[i];
int u,v,val;
for(int i=;i<=m;++i){
cin>>u>>v>>val;
adj[u].push_back({v,val});
adj[v].push_back({u,val});
}
SPFA();
DFS(s);
cout<<sent<<" ";
for(int i=path.size()-;i>=;--i){
if(i<path.size()-)
cout<<"->";
cout<<path[i];
}
cout<<" "<<take;
return ;
}

最新文章

  1. Unslider.js Tiny Sample
  2. java解析json
  3. C# Delegate 匿名 Delegate
  4. 如何编写一个编译c#控制台应用程序的批处理程序
  5. java中的==和!=
  6. php--opp--1.什么是面向对象?
  7. CocoaPods不更新spec仓库进行install/update
  8. 微信内移动前端开发抓包调试工具fiddler使用教程
  9. Redis持久存储-AOF&RDB
  10. 实现ThreadFactory接口生成自定义的线程给Fork/Join框架
  11. SVG渐变
  12. Spark源码编译(未完待续)
  13. Unity开发之存档和读档的三种实现方式
  14. 在linux下,怎么去查看一个运行中的程序, 到底是占用了多少内存
  15. Unity pdb2mdb错误
  16. React中的通讯组件
  17. 201555301 2016-2017-2《Java程序设计》课程总结
  18. 高性能Web服务器Nginx的配置与部署研究(13)应用模块之Memcached模块+Proxy_Cache双层缓存模式
  19. jquery入门 修改网页背景颜色
  20. Zabbix——自动发现

热门文章

  1. HDU 6631 line symmetric 计算几何
  2. 8.5-Day1T1--Asm.Def 谈笑风生
  3. __dirname和__filename和process.cwd()三者的区别
  4. N个数求和(PTA)
  5. Python学习(二)——Python基础
  6. MYSQL 传汉字获取拼音首字母
  7. P1428
  8. 无法打开物理文件 XXX.mdf&quot;,操作系统错误 5.5(拒绝访问) 的解决办法
  9. 【笔记8-Redis分布式锁】从0开始 独立完成企业级Java电商网站开发(服务端)
  10. 爬虫(十三):PIL模块