news 2026/7/28 19:42:10

CCF 201712-4 行车路线

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
CCF 201712-4 行车路线

目录

    • 思路
    • DFS实现代码
    • 运行样例截图
    • BFS实现代码


目前我的程序提交只能得20分,我没发现哪有问题,看了好多博客下面提出的一些测试点也都能跑正确,请发现问题的小伙伴跟我讨论讨论指明一下,谢谢!

思路

按深度优先搜索的思想,用邻接表存储图,然后遍历至尾结点n,将一路上得到的疲劳度加入vector动态数组,最后排序输出第一个。
计算疲劳度思路,通过temp[i]来记录到达 i 节点时的状态,包括当前的总疲劳度、是否是经过小路到达i、如果是经过小路到达i那么连续经过了多少小路,在遍历节点i的下一个节点时就把节点i的状态往下延伸,从而计算得到下一个节点的状态,直到遍历到n结束。

DFS实现代码

#include<cstdio>#include<algorithm>#include<vector>#include<cstring>using namespace std;constintMAXN=510;typedef long long ll;struct Edge{ll d;int v,t;Edge(int _v,ll _d,int _t):v(_v),d(_d),t(_t){};};struct Node{ll allDis,allEdge;int flag;Node(){};Node(ll _allDis,ll _allEdge,int _flag):allDis(_allDis),allEdge(_allEdge),flag(_flag){};}temp[MAXN];vector<Edge>Adj[MAXN];vector<ll>di;int n,m;voidDFS(int s){for(int i=0;i<Adj[s].size();i++){int v=Adj[s][i].v;ll d=Adj[s][i].d;int t=Adj[s][i].t;ll new_allEdge;if(t==1){temp[v].allEdge=temp[s].allEdge+d;temp[v].allDis=temp[s].allDis-temp[s].allEdge*temp[s].allEdge+temp[v].allEdge*temp[v].allEdge;temp[v].flag=1;}else{temp[v].allDis=temp[s].allDis+d;temp[v].flag=0;temp[v].allEdge=0;}if(v==n){di.push_back(temp[v].allDis);continue;}DFS(v);}}intmain(){int t,a,b;ll c;scanf("%d%d",&n,&m);for(int i=0;i<m;i++){scanf("%d%d%d%lld",&t,&a,&b,&c);Adj[a].push_back(Edge(b,c,t));}temp[1].allDis=0;temp[1].allEdge=0;temp[1].flag=0;DFS(1);sort(di.begin(),di.end());printf("%lld",di.front());return0;}

运行样例截图

这是我把运行样例的每一条路径所消耗的疲劳度都打印出来了。(按理输出第一个就行)

BFS实现代码

#include<cstdio>#include<algorithm>#include<vector>#include<cstring>using namespace std;constintMAXN=510;typedef long long ll;struct Edge{ll d;int v,t;Edge(int _v,ll _d,int _t):v(_v),d(_d),t(_t){};};struct Node{ll allDis,allEdge;int flag;Node(){};Node(ll _allDis,ll _allEdge,int _flag):allDis(_allDis),allEdge(_allEdge),flag(_flag){};};vector<Node>dp[3];vector<Edge>Adj[MAXN];vector<Edge>Adj1[MAXN];vector<ll>di;int n,m;ll minDis=1e18;int tl;voidBFS(int s){int t2=1-tl;if(Adj1[s].size()==0&&s!=n)return;for(int j=0;j<dp[tl].size();j++){Node ans=dp[tl][j],temp;for(int i=0;i<Adj[s].size();i++){int v=Adj[s][i].v;ll d=Adj[s][i].d;int t=Adj[s][i].t;if(t==1){temp.allEdge=ans.allEdge+d;temp.allDis=ans.allDis-ans.allEdge*ans.allEdge+temp.allEdge*temp.allEdge;temp.flag=1;}else{temp.allDis=ans.allDis+d;temp.flag=0;temp.allEdge=0;}if(v==1){di.push_back(temp.allDis);continue;}elsedp[t2].push_back(temp);}}dp[tl].clear();tl=t2;}intmain(){int t,a,b;ll c;scanf("%d%d",&n,&m);for(int i=0;i<m;i++){scanf("%d%d%d%lld",&t,&a,&b,&c);Adj[b].push_back(Edge(a,c,t));Adj1[a].push_back(Edge(b,c,t));}dp[tl].push_back(Node(0,0,0));for(int i=n;i>=1;i--){BFS(i);}sort(di.begin(),di.end());printf("%lld",di.front());return0;}``
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/28 19:40:40

【笔试题目整理】 网易2018校园招聘数据分析师笔试卷

最近在准备数据分析岗位的笔试&#xff0c;整理了牛客网上的一些试题与答案方便查看。 试卷信息&#xff1a; 客观题&#xff1a;单选20道 主观题&#xff1a;问答1道,编程2道 完成时间&#xff1a; 120分钟 难度系数&#xff1a; 三颗星 总分&#xff1a; 100分 注&#…

作者头像 李华
网站建设 2026/7/28 19:39:35

RF-DETR + ByteTrack 多目标跟踪实战:命令行与 Python 两种流程

RF-DETR ByteTrack 多目标跟踪实战&#xff1a;命令行与 Python 两种流程 这篇教程根据我复现 ByteTrack 多目标跟踪流程时整理&#xff0c;重点演示示例视频准备、命令行跟踪、Python 回调处理和运动补偿轨迹可视化。 本文整理自我的学习和项目复现过程&#xff0c;尽量按实…

作者头像 李华
网站建设 2026/7/28 19:36:20

11. Container With Most Water 盛最多水的容器

原题链接&#xff1a;https://leetcode.com/problems/container-with-most-water/ 找出在n条垂直于x轴的线中能够组成的最大容器面积的两条线&#xff0c;容器不能倾斜&#xff0c;n的最小值为2. 解题思路&#xff1a; 1.暴力破解 设起始点为i&#xff0c;终点为j&#xff0c;找…

作者头像 李华
网站建设 2026/7/28 19:30:11

AI如何重塑应用开发:从传统App到智能体的技术转型与实践指南

这次我们来看一个关于“AI将会取代90%的app”的讨论。这不是一个具体的开源项目&#xff0c;而是一个正在发生的技术趋势和行业预测。核心观点是&#xff0c;随着AI大模型能力的增强&#xff0c;特别是智能体&#xff08;AI Agent&#xff09;和自然语言交互的成熟&#xff0c;…

作者头像 李华
网站建设 2026/7/28 19:25:36

【C++】 C++11 统一列表初始化

目录一、 一切皆可 {}二、 自定义类型&#xff0c;自动调用构造函数三、 幕后操作&#xff1a;std::initializer_list四、 玩转 STL 容器&#xff1a;告别繁琐的 push_back总结在 C11 之前&#xff0c;初始化一个变量或对象的方式五花八门&#xff1a;等号赋值、括号传参、大括…

作者头像 李华