ccf 201712-4 行车路线

解题思路:

  首先Dijkstra是基于贪心算法的,即每一次作出的选择都具有贪心选择性。此题由于有“如果连续走小道,小明的疲劳值会快速增加,连续走s公里小明会增加s2的疲劳度。”这种情况,所以不能使用Dijkstra算法。

  这里使用Bellman-Ford算法

70分备份待修改:

  1. #include<iostream>
  2. #include<cstring>
  3. using namespace std;
  4. int n,m;//n为路口的数量,m为道路的数量
  5. const int maxn = + ;
  6. const int maxm = + ;
  7. const int INF = ;//无穷大
  8. struct node{
  9. int ci,cj;
  10. int type;
  11. int cij;
  12. }path[*maxm];
  13.  
  14. int Edge[maxn][maxn];//记录两个点之间路径的编号
  15. int dist[maxn];//记录源点1到每一个节点的最短路
  16. int pro[maxn];//记录每一个节点的前驱结点
  17.  
  18. void bellman()
  19. {
  20. memset(dist,INF,sizeof(dist));
  21. dist[] = ;
  22. memset(pro,-,sizeof(pro));
  23. pro[] = ;//1没有前驱
  24. for(int k=;k<n;k++)///进行n-1次松弛操作
  25. {
  26. bool flag = false;
  27. for(int i=;i<*m;i++)
  28. {
  29. if(path[i].type == )//大道
  30. {
  31. if(dist[path[i].cj] > dist[path[i].ci]+path[i].cij)
  32. {
  33. dist[path[i].cj] = dist[path[i].ci]+path[i].cij;
  34. pro[path[i].cj] = path[i].ci;
  35. flag = true;
  36. }
  37. } else{//小道
  38. //首先要计算出连续走小路多长时间
  39. int con = path[i].cij;
  40. int temp = i;
  41. if(pro[path[i].ci] != - && pro[path[i].ci] != )//已经加入,有前驱
  42. {
  43.  
  44. int pathnum = Edge[pro[path[temp].ci]][path[temp].ci];
  45. while( path[pathnum].type == )//连续走小道
  46. {
  47. con += path[pathnum].cij;
  48. temp = Edge[pro[path[temp].ci]][path[temp].ci];
  49. if(pro[path[pathnum].ci] == ) break;//到达起始结点
  50. pathnum = Edge[pro[path[temp].ci]][path[temp].ci];
  51. }
  52.  
  53. }
  54. if(dist[path[i].cj]>dist[path[temp].ci] + con*con)
  55. {
  56. dist[path[i].cj]=dist[path[temp].ci] + con*con;
  57. pro[path[i].cj] = path[i].ci;
  58. flag = true;
  59. }
  60. }
  61. }
  62. if(!flag) break;
  63. }
  64. }
  65.  
  66. int main()
  67. {
  68.  
  69. while(cin>>n>>m)
  70. {
  71. for(int i=;i<*m;i++)
  72. {
  73. cin>>path[i].type>>path[i].ci>>path[i].cj>>path[i].cij;
  74. i++;
  75. path[i].ci = path[i-].cj;path[i].cj = path[i-].ci;
  76. path[i].cij = path[i-].cij;path[i].type = path[i-].type;
  77. Edge[path[i].ci][path[i].cj] = i;
  78. Edge[path[i].cj][path[i].ci] = i-;
  79. }
  80.  
  81. bellman();
  82. cout<<dist[n]<<endl;
  83. }
  84. return ;
  85. }

ccf 201712-4 行车路线(70分)的更多相关文章

  1. ccf 201712-4 行车路线(Python实现)

    一.原题 问题描述 试题编号: 201712-4 试题名称: 行车路线 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 小明和小芳出去乡村玩,小明负责开车,小芳来导航. 小芳将 ...

  2. 洛谷P4559 [JSOI2018]列队 【70分二分 + 主席树】

    题目链接 洛谷P4559 题解 只会做\(70\)分的\(O(nlog^2n)\) 如果本来就在区间内的人是不用动的,区间右边的人往区间最右的那些空位跑,区间左边的人往区间最左的那些空位跑 找到这些空 ...

  3. 「PKUSC2018」星际穿越 (70分做法)

    5371: [Pkusc2018]星际穿越 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 27  Solved: 11[Submit][Status] ...

  4. 洛谷P1979 华容道(70分 暴力)

    P1979 华容道 题目描述 [问题描述] 小 B 最近迷上了华容道,可是他总是要花很长的时间才能完成一次.于是,他想到用编程来完成华容道:给定一种局面, 华容道是否根本就无法完成,如果能完成, 最少 ...

  5. 洛谷P1081 开车旅行70分

    https://www.luogu.org/problem/show?pid=1081 太遗憾了明明写出来了,却把最小值初始值弄小了,从第二个点开始就不可能对了.70分! #include<io ...

  6. 华容道 noip2013 70分搜索

    题目描述 [问题描述] 小 B 最近迷上了华容道,可是他总是要花很长的时间才能完成一次.于是,他想到用编程来完成华容道:给定一种局面, 华容道是否根本就无法完成,如果能完成, 最少需要多少时间. 小 ...

  7. ccf 201712-4 行车路线(30分超时)

    问题描述 小明和小芳出去乡村玩,小明负责开车,小芳来导航. 小芳将可能的道路分为大道和小道.大道比较好走,每走1公里小明会增加1的疲劳度.小道不好走,如果连续走小道,小明的疲劳值会快速增加,连续走s公 ...

  8. 【CCF CSP】 20171203 行车路线 Java(有问题)80分

    问题描述 小明和小芳出去乡村玩,小明负责开车,小芳来导航. 小芳将可能的道路分为大道和小道.大道比较好走,每走1公里小明会增加1的疲劳度.小道不好走,如果连续走小道,小明的疲劳值会快速增加,连续走s公 ...

  9. ccf 行车路线

    问题描述 小明和小芳出去乡村玩,小明负责开车,小芳来导航. 小芳将可能的道路分为大道和小道.大道比较好走,每走1公里小明会增加1的疲劳度.小道不好走,如果连续走小道,小明的疲劳值会快速增加,连续走s公 ...

随机推荐

  1. Excel中把图片合并进图表的方法介绍

    方法一: 使用“图案”对话框 双击某个数据系列,选择“图案”标签,单击“填充效果”按钮,在“填充效果”对话框中选择“图片”标签,单击“选择图片”按钮,选择一个要使用的图形文件即可. 方法二: 使用剪贴 ...

  2. 深入分析 Docker 镜像原理

    摘要:近日, DaoCloud 软件工程师孙宏亮在 CSDN Container 微信群为大家带来了 Docker 镜像原理的深度分享,本次分享的重点是 Docker 镜像,分享的内容主要包含两个部分 ...

  3. 查询表中列转换为json

    DECLARE @sql VARCHAR(MAX) SET @sql= (SELECT (select '+'',"'+column_name+'":"''+CAST(' ...

  4. ubuntu安装软件apt-get

    一. apt-get用法 apt 0.8.16~exp12ubuntu10.26 for i386 compiled on Aug  5 2015 19:06:21Usage: apt-get [op ...

  5. Oracle【select from 语句】

    Oracle[select from  语句] 1.select基本功能介绍1)投影操作:结果集是源表中的部分“列”2)选择操作:结果集是源表中的部分“行”3)选择操作+投影操作:结果集是源表中的部分 ...

  6. 论文笔记:Unsupervised Domain Adaptation by Backpropagation

    14年9月份挂出来的文章,基本思想就是用对抗训练的方法来学习domain invariant的特征表示.方法也很只管,在网络的某一层特征之后接一个判别网络,负责预测特征所属的domain,而后特征提取 ...

  7. python常用模块:模块练习

    今日作业: 1.简述 什么是模块 模块就将一些函数功能封装在一个文件内,以‘文件名.py’命名,以“import 文件名”方式调用 模块有哪些来源  自定义.内置.DLL编译器.包模块的格式要求有哪些 ...

  8. Select,poll,epoll复用

    Select,poll,epoll复用 1)select模块以列表的形式接受四个参数,分别是可读对象,可写对象,产生异常的对象,和超时设置.当监控符对象发生变化时,select会返回发生变化的对象列表 ...

  9. HDU - 6435 Problem J. CSGO (曼哈顿距离变换)

    题目大意:有两类武器(主武器和副武器),每类有若干把,每把武器都有一个基础属性S,以及k个附加属性,让你选一把主武器M和一把副武器S,使得最大. 显然后面的和式是一个k维的曼哈顿距离,带绝对值符号不好 ...

  10. hive 汇率拉链表转日连续流水表

    1.什么是拉链表 拉链表是针对数据仓库设计中表存储数据的方式而定义的,顾名思义,所谓拉链,就是记录历史.记录一个事物从开始,一直到当前状态的所有变化的信息. 我们先看一个示例,这就是一张拉链表,存储的 ...