ccf 201712-4 行车路线(70分)
ccf 201712-4 行车路线
解题思路:
首先Dijkstra是基于贪心算法的,即每一次作出的选择都具有贪心选择性。此题由于有“如果连续走小道,小明的疲劳值会快速增加,连续走s公里小明会增加s2的疲劳度。”这种情况,所以不能使用Dijkstra算法。
这里使用Bellman-Ford算法
70分备份待修改:
- #include<iostream>
- #include<cstring>
- using namespace std;
- int n,m;//n为路口的数量,m为道路的数量
- const int maxn = + ;
- const int maxm = + ;
- const int INF = ;//无穷大
- struct node{
- int ci,cj;
- int type;
- int cij;
- }path[*maxm];
- int Edge[maxn][maxn];//记录两个点之间路径的编号
- int dist[maxn];//记录源点1到每一个节点的最短路
- int pro[maxn];//记录每一个节点的前驱结点
- void bellman()
- {
- memset(dist,INF,sizeof(dist));
- dist[] = ;
- memset(pro,-,sizeof(pro));
- pro[] = ;//1没有前驱
- for(int k=;k<n;k++)///进行n-1次松弛操作
- {
- bool flag = false;
- for(int i=;i<*m;i++)
- {
- if(path[i].type == )//大道
- {
- if(dist[path[i].cj] > dist[path[i].ci]+path[i].cij)
- {
- dist[path[i].cj] = dist[path[i].ci]+path[i].cij;
- pro[path[i].cj] = path[i].ci;
- flag = true;
- }
- } else{//小道
- //首先要计算出连续走小路多长时间
- int con = path[i].cij;
- int temp = i;
- if(pro[path[i].ci] != - && pro[path[i].ci] != )//已经加入,有前驱
- {
- int pathnum = Edge[pro[path[temp].ci]][path[temp].ci];
- while( path[pathnum].type == )//连续走小道
- {
- con += path[pathnum].cij;
- temp = Edge[pro[path[temp].ci]][path[temp].ci];
- if(pro[path[pathnum].ci] == ) break;//到达起始结点
- pathnum = Edge[pro[path[temp].ci]][path[temp].ci];
- }
- }
- if(dist[path[i].cj]>dist[path[temp].ci] + con*con)
- {
- dist[path[i].cj]=dist[path[temp].ci] + con*con;
- pro[path[i].cj] = path[i].ci;
- flag = true;
- }
- }
- }
- if(!flag) break;
- }
- }
- int main()
- {
- while(cin>>n>>m)
- {
- for(int i=;i<*m;i++)
- {
- cin>>path[i].type>>path[i].ci>>path[i].cj>>path[i].cij;
- i++;
- path[i].ci = path[i-].cj;path[i].cj = path[i-].ci;
- path[i].cij = path[i-].cij;path[i].type = path[i-].type;
- Edge[path[i].ci][path[i].cj] = i;
- Edge[path[i].cj][path[i].ci] = i-;
- }
- bellman();
- cout<<dist[n]<<endl;
- }
- return ;
- }
ccf 201712-4 行车路线(70分)的更多相关文章
- ccf 201712-4 行车路线(Python实现)
一.原题 问题描述 试题编号: 201712-4 试题名称: 行车路线 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 小明和小芳出去乡村玩,小明负责开车,小芳来导航. 小芳将 ...
- 洛谷P4559 [JSOI2018]列队 【70分二分 + 主席树】
题目链接 洛谷P4559 题解 只会做\(70\)分的\(O(nlog^2n)\) 如果本来就在区间内的人是不用动的,区间右边的人往区间最右的那些空位跑,区间左边的人往区间最左的那些空位跑 找到这些空 ...
- 「PKUSC2018」星际穿越 (70分做法)
5371: [Pkusc2018]星际穿越 Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 27 Solved: 11[Submit][Status] ...
- 洛谷P1979 华容道(70分 暴力)
P1979 华容道 题目描述 [问题描述] 小 B 最近迷上了华容道,可是他总是要花很长的时间才能完成一次.于是,他想到用编程来完成华容道:给定一种局面, 华容道是否根本就无法完成,如果能完成, 最少 ...
- 洛谷P1081 开车旅行70分
https://www.luogu.org/problem/show?pid=1081 太遗憾了明明写出来了,却把最小值初始值弄小了,从第二个点开始就不可能对了.70分! #include<io ...
- 华容道 noip2013 70分搜索
题目描述 [问题描述] 小 B 最近迷上了华容道,可是他总是要花很长的时间才能完成一次.于是,他想到用编程来完成华容道:给定一种局面, 华容道是否根本就无法完成,如果能完成, 最少需要多少时间. 小 ...
- ccf 201712-4 行车路线(30分超时)
问题描述 小明和小芳出去乡村玩,小明负责开车,小芳来导航. 小芳将可能的道路分为大道和小道.大道比较好走,每走1公里小明会增加1的疲劳度.小道不好走,如果连续走小道,小明的疲劳值会快速增加,连续走s公 ...
- 【CCF CSP】 20171203 行车路线 Java(有问题)80分
问题描述 小明和小芳出去乡村玩,小明负责开车,小芳来导航. 小芳将可能的道路分为大道和小道.大道比较好走,每走1公里小明会增加1的疲劳度.小道不好走,如果连续走小道,小明的疲劳值会快速增加,连续走s公 ...
- ccf 行车路线
问题描述 小明和小芳出去乡村玩,小明负责开车,小芳来导航. 小芳将可能的道路分为大道和小道.大道比较好走,每走1公里小明会增加1的疲劳度.小道不好走,如果连续走小道,小明的疲劳值会快速增加,连续走s公 ...
随机推荐
- Excel中把图片合并进图表的方法介绍
方法一: 使用“图案”对话框 双击某个数据系列,选择“图案”标签,单击“填充效果”按钮,在“填充效果”对话框中选择“图片”标签,单击“选择图片”按钮,选择一个要使用的图形文件即可. 方法二: 使用剪贴 ...
- 深入分析 Docker 镜像原理
摘要:近日, DaoCloud 软件工程师孙宏亮在 CSDN Container 微信群为大家带来了 Docker 镜像原理的深度分享,本次分享的重点是 Docker 镜像,分享的内容主要包含两个部分 ...
- 查询表中列转换为json
DECLARE @sql VARCHAR(MAX) SET @sql= (SELECT (select '+'',"'+column_name+'":"''+CAST(' ...
- ubuntu安装软件apt-get
一. apt-get用法 apt 0.8.16~exp12ubuntu10.26 for i386 compiled on Aug 5 2015 19:06:21Usage: apt-get [op ...
- Oracle【select from 语句】
Oracle[select from 语句] 1.select基本功能介绍1)投影操作:结果集是源表中的部分“列”2)选择操作:结果集是源表中的部分“行”3)选择操作+投影操作:结果集是源表中的部分 ...
- 论文笔记:Unsupervised Domain Adaptation by Backpropagation
14年9月份挂出来的文章,基本思想就是用对抗训练的方法来学习domain invariant的特征表示.方法也很只管,在网络的某一层特征之后接一个判别网络,负责预测特征所属的domain,而后特征提取 ...
- python常用模块:模块练习
今日作业: 1.简述 什么是模块 模块就将一些函数功能封装在一个文件内,以‘文件名.py’命名,以“import 文件名”方式调用 模块有哪些来源 自定义.内置.DLL编译器.包模块的格式要求有哪些 ...
- Select,poll,epoll复用
Select,poll,epoll复用 1)select模块以列表的形式接受四个参数,分别是可读对象,可写对象,产生异常的对象,和超时设置.当监控符对象发生变化时,select会返回发生变化的对象列表 ...
- HDU - 6435 Problem J. CSGO (曼哈顿距离变换)
题目大意:有两类武器(主武器和副武器),每类有若干把,每把武器都有一个基础属性S,以及k个附加属性,让你选一把主武器M和一把副武器S,使得最大. 显然后面的和式是一个k维的曼哈顿距离,带绝对值符号不好 ...
- hive 汇率拉链表转日连续流水表
1.什么是拉链表 拉链表是针对数据仓库设计中表存储数据的方式而定义的,顾名思义,所谓拉链,就是记录历史.记录一个事物从开始,一直到当前状态的所有变化的信息. 我们先看一个示例,这就是一张拉链表,存储的 ...