zoukankan      html  css  js  c++  java
  • SSLZYC 2404 上学

    题目大意:

    这里写图片描述


    思路:
    n,m<=50!!!
    看到这个数据还不开心吗?秒选DFS啦!

    但是有一点必须注意:

    这道题强烈建议记录边而不是记录点,这道题有重边,但是离开时间,行驶时间和付钱可能不一样,如果记录点,很可能会冲掉一些边。


    代码:

    #include <cstdio>
    #include <iostream>
    using namespace std;
    
    struct N  //结构体
    {
        int a,b,leave,time,money;
    }a[101];
    
    const int inf=2147483647;
    int n,T,m,b[101],minn;
    
    void dfs(int x,int t,int k)  //深搜
    {
        if (t>T) return;  //超过限定时间
        if (k>minn) return;  //付的钱比最有答案多
        if (x==n)  //到了终点
        {
            if (k<minn) minn=k;  //更新答案
            return;  //返回
        }
        for (int i=1;i<=m;i++)  //枚举每条边
         if (a[i].a==x&&b[a[i].b]==0&&t<a[i].leave)  //如果这条边的起点是现在所在的点,没有走过且在这辆车到达之前我们到达了
         {
            b[a[i].b]=1;  //记录
            dfs(a[i].b , a[i].time , k+a[i].money);
            b[a[i].b]=0;
         }
    }
    
    int main()
    {
        scanf("%d%d%d",&n,&T,&m);
        for (int i=1;i<=m;i++)
        {
            scanf("%d%d%d%d%d",&a[i].a,&a[i].b,&a[i].leave,&a[i].time,&a[i].money);
            a[i].a++;
            a[i].b++;
            a[i].time+=a[i].leave;
        }
        minn=inf;
        b[1]=1;
        dfs(1,-1,0);  //搜索
        if (minn!=inf) printf("%d\n",minn);
        else puts("-1");
        return 0;
    }
  • 相关阅读:
    创建支持SSH服务的镜像
    docker网络基础配置
    docker数据管理
    ELK安装笔记
    OpenVAS虚拟机安装
    nslookup命令
    docker仓库操作
    Percona Monitoring and Management (PMM)安装使用
    zabbix2.4.5安装zatree插件
    docker容器操作
  • 原文地址:https://www.cnblogs.com/hello-tomorrow/p/9313074.html
Copyright © 2011-2022 走看看