1018. Public Bike Management (30)
2017-04-08 12:50
330 查看
最短路的变体
#include <iostream>
#include <stdio.h>
#include <string.h>
#include <vector>
#include <map>
#include <stack>
#include <queue>
#include <algorithm>
#include <set>
using namespace std;
int Cmax,N,Sp,M;
int C[505];
int Road[505][505];
bool isReached[505];
int curLen=0;
int minLen=1<<30;
int curBike=0;
int minBike=1<<30;
int curSend=0;
int minSend=1<<30;
vector<int> curRoad;
vector<int> minRoad;
void dfs(int cur)
{
if(curLen>minLen)
return;
if(cur == Sp)
{
bool choosed = false;
if(curLen<minLen)
{
choosed = true;
}else if(curLen == minLen)
{
if(curSend<minSend)
{
choosed = true;
}else if(curSend == minSend)
{
if(curBike<minBike)
{
choosed = true;
}
}
}
if(choosed)
{
minLen = curLen;
minSend = curSend;
minBike = curBike;
minRoad = curRoad;
}
return;
}
for(int i=0;i<=N;i++)
{
if(!isReached[i] && Road[cur][i]>0)
{
isReached[i] = true;
curLen+= Road[cur][i];
int lastCurSend = curSend;
int lastCurBike = curBike;
if(C[i]+curBike<Cmax/2){
curSend += Cmax/2 - (C[i]+curBike);
curBike = 0;
}else{
curBike = C[i]+curBike-Cmax/2;
}
curRoad.push_back(i);
dfs(i);
curRoad.pop_back();
curSend = lastCurSend;
curBike = lastCurBike;
curLen-= Road[cur][i];
isReached[i] = false;
}
}
}
int main(){
scanf("%d%d%d%d",&Cmax,&N,&Sp,&M);
for(int i=1;i<=N;i++){
scanf("%d",C+i);
}
for(int i=0;i<M;i++){
int a,b,c;
scanf("%d%d%d",&a,&b,&c);
Road[a][b]=c;
Road[b][a]=c;
}
isReached[0]=true;
dfs(0);
printf("%d ",minSend);
printf("%d",0);
for(int i=0;i<minRoad.size();i++){
printf("->%d",minRoad[i]);
}
printf(" %d",minBike);
return 0;
}
相关文章推荐
- 剑指offer 30 连续子数组的最大值
- python升级后yum不能使用报错 File “/usr/bin/yum”, line 30
- 1038. Recover the Smallest Number (30)
- 杭州4--30,关于css,bootstrap,url渲染的js语句问题
- Linux-30-linux基础重要命令07(L005-12)
- [LeetCode] 30. Substring with Concatenation of All Words 解题思路 - Java
- cp30连接池配置问题
- 30 不重复的三位数
- Windows学习总结(2)——30+ Windows命令提示符快捷键汇总
- 1087. All Roads Lead to Rome (30) PAT
- 2016年工作中遇到的问题21-30
- 微招聘:国内化工医药行业翘楚,A股上市私营企业,现诚聘IT运维高级工程师,年薪在30~40万左右
- solution Of 1022. Digital Library (30)
- 1099. Build A Binary Search Tree (30)
- 每天一个linux命令30)--chgrp命令
- PAT (Advanced Level) 1115. Counting Nodes in a BST (30)
- "围观"设计模式(30)--结构型设计模式总结(适配器、代理、装饰、外观、桥梁、组合、享元)
- pta 1099. Build A Binary Search Tree (30)
- 30 最小的K个数
- pat 1064. Complete Binary Search Tree (30)