• 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;
    }
  • 相关阅读:
    做接口测试最重要的知识点
    HTTP和HTTPS区别
    UVA, 686 Goldbach's Conjecture (II)
    UVA, 543 Goldbach's Conjecture
    UVA, 580 Critical Mass
    UVA, 900 Brick Wall Patterns
    UVA, 11000 Bee
    UVA, 10079 Pizza Cutting
    C++ 向量<vector>的学习
    jenkins入门
  • 原文地址:https://www.cnblogs.com/hello-tomorrow/p/9313074.html
Copyright © 2020-2023  润新知