#include<bits/stdc++.h>
using namespace std;
const int inf = 1e9;
int sum,n,tar,m;
int num[507];
int edge[507][507];
int u,v,val;
int mn=inf,mn_send=inf,mn_back=inf;
int cur=0,cur_send=0,cur_back=0;
int vis[507];
vector<int>cur_path,ans;
void dfs(int x){
    if(cur>mn)//已经不是最短路,无需深入了
        return;
    if(x==tar){//到达目标点,有更优解就更新
        if(cur<mn){
            mn=cur;
            mn_send=cur_send;
            mn_back=cur_back;
            ans=cur_path;
        }
        else if(cur==mn&&(cur_send<mn_send||cur_send==mn_send&&cur_back<mn_back)){
                mn_send=cur_send;
                mn_back=cur_back;
                ans=cur_path;
        }
        return;
    }
    for(int i=1;i<=n;++i){
        if(vis[i]||edge[x][i]==inf)//前面已经经过该点或者此路不通就换下一个点
            continue;
        vis[i]=1;
        cur_path.push_back(i);//放进路径中
        cur+=edge[x][i];//修改当前路径长度
        int tmp_send=cur_send;//存放当前需要发出
        int tmp_back=cur_back;//存放当前需要返回
        if(num[i]+cur_back<sum/2)//如果当前站缺车
            cur_send+=sum/2-num[i]-cur_back,cur_back=0;
        else//当前站不缺车
            cur_back+=num[i]-sum/2;
        dfs(i);//在这个点的基础上接着深入
        cur_path.pop_back();//还原到没有经过i点之前的状态
        vis[i]=0;
        cur-=edge[x][i];
        cur_send=tmp_send;
        cur_back=tmp_back;
    }
}
int main(){
    std::ios::sync_with_stdio(false);//关闭同步
    cin>>sum>>n>>tar>>m;
    for(int i=0;i<=n;++i)
        for(int j=0;j<=n;++j)
            edge[i][j]=inf,edge[j][i]=inf;//初始化让所有点之间路径无限长
    for(int i=1;i<=n;++i)
        cin>>num[i];
    for(int i=1;i<=m;++i){
        cin>>u>>v>>val;
        edge[u][v]=val;
        edge[v][u]=val;
    }
    dfs(0);//从根节点开始深度优先搜索
    cout<<mn_send<<" 0";
    for(auto&it:ans)
        cout<<"->"<<it;
    cout<<" "<<mn_back;
    return 0;
}

Public Bike Management (30)(DFS,VRCTOR,模拟)(PAT甲级)的更多相关文章

  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. 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 ...

  3. pat Public Bike Management (30)

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

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

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

  5. 1018. Public Bike Management (30)

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

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

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

  7. 1018 Public Bike Management (30 分)

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

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

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

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

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

随机推荐

  1. 关于setTimeout()你所不知道的地方

    前言:看了这篇文章,1.注意setTimeout引用的是全部变量还是局部变量了,当直接调用外部函数方法时,实际上函数内部的变量已经变成全 局.2.提醒我防止出错的,用匿名函数不容易出错.3.setTi ...

  2. 自学安卓开发篇——day01

    第一次自学安卓开发,首先从开发环境的配置说起,目前安卓开发主要用到的开发环境是Android Studio和Eclipse+ADT,由于我自己的笔记本配置比较低,而studio对电脑的配置要求比较高, ...

  3. js闭包的定义

    通过函数字面量创建的函数对象包含一个连接到外部上下文的连接,这叫做闭包. 还有一种定义:函数可以访问它被创建时所处的上下文环境,叫做闭包.

  4. JAVA 中的IO流

    Java中的IO流是用来处理设备与设备之前的数据传输,在java中以流的形式传输.流分为两类:字节流和字符流. 字节流:InputStream,OutPutSteam.(计算机内的数据都是以字节存储的 ...

  5. Mysql 使用触发器,把插入的数据在插入到宁一张表里

    CREATE TRIGGER tgr_tablea_insert AFTER //触发器名字 动作在插入数据之后 ON alertinfo //监听哪个表之后触发 FOR INSERT //监听的表的 ...

  6. devcloud

    zone名字:devcloud 外网dns:8.8.8.8 内网dns:10.0.2.3   提供点名称:devcloud   cs bug问题:https://issues.apache.org/j ...

  7. dpdk中log的使用方法

    1 log简介    dpdk中通过log系统记录相关的日志信息,每一条日志除日志内容外,还有两个附加信息,log级别和log类型.开发人员可根据级别和类型对日志信息进行过滤,只记录必要的日志.1.1 ...

  8. 怎样在本地电脑上连接另外一台电脑上的mysql数据?(代码示例)

    基本上有两种方式: 1,使用MYSQL的管理工具,可以远程连接,比如用导航猫系列的,只要知道对方IP,然后就可以自己输入账号密码连接了. 2,使用代码连接. Java代码示例: package com ...

  9. 908D New Year and Arbitrary Arrangement

    传送门 分析 代码 #include<iostream> #include<cstdio> #include<cstring> #include<string ...

  10. ajax 整个表单的提交

    重点:data: $("#form1").serialize() function setSaveNext() { setSaveData(); var cx = pageInde ...