CSP 行车路线 最短路变型

问题描述:

  • 小明和小芳出去乡村玩,小明负责开车,小芳来导航。
  • 小芳将可能的道路分为大道和小道。大道比较好走,每走1公里小明会增加1的疲劳度。小道不好走,如果连续走小道,小明的疲劳值会快速增加,连续走s公里小明会增加s*s的疲劳度。
  • 例如:有5个路口,1号路口到2号路口为小道,2号路口到3号路口为小道,3号路口到4号路口为大道,4号路口到5号路口为小道,相邻路口之间的距离都是2公里。如果小明从1号路口到5号路口,则总疲劳值为(2+2)2+2+22=16+2+4=22。
  • 现在小芳拿到了地图,请帮助她规划一个开车的路线,使得按这个路线开车小明的疲劳度最小。
      
      

    输入格式:

  • 输入的第一行包含两个整数n,m,分别表示路口的数量和道路的数量。
  • 路口由1至n编号,小明需要开车从1号路口到n号路口。
  • 接下来m行描述道路,每行包含四个整数t,a,b,c,表示一条类型为t,连接a与b两个路口,长度为c公里的双向道路。
  • 其中t为0表示大道,t为1表示小道。保证1号路口和n号路口是连通的。
      

    输出格式:

  • 输出一个整数,表示最优路线下小明的疲劳度。

样例输入:

6 7
1 1 2 3
1 2 3 2
0 1 3 30
0 3 4 20
0 4 5 30
1 3 5 6
1 5 6 1

样例输出:

76

样例说明:

  •  从1走小道到2,再走小道到3,疲劳度为52=25;然后从3走大道经过4到达5,疲劳度为20+30=50;最后从5走小道到6,疲劳度为1。总共为76。

数据规模和约定:

  • 对于30%的评测用例,1 ≤ n ≤ 8,1 ≤ m ≤ 10;
  • 对于另外20%的评测用例,不存在小道;
  • 对于另外20%的评测用例,所有的小道不相交;
  • 对于所有评测用例,1 ≤ n ≤ 500,1 ≤ m ≤ 1e5,1 ≤ a, b ≤ n,t是0或1,c ≤ 105。保证答案不超过1e6。

分析:

  • 典型的最短路问题,容易想到:如果没有小路,那么这题就是最基础的最短路,直接用dijkstra求解,可以通过60%的数据
  • 题目中并没有说明是否存在重边 10%的数据
  • 小路增加的疲劳度计算是连续走小路的路长的平方,因此在多段图中,就不能像简单的最短路问题一样直接存储节点的编号和到这个点的最短路径长度
  • 根据题目描述,在dijkstra的过程中,每个节点都记录 到该节点的前一段走小路的长度s、走小路前的疲劳值、走到这点的总疲劳值
  • 设置从节点1到节点i的最小疲劳值为dist1[i] - 最后一段是大路;dist2[i] - 最后一段是小路
  • 根据当前节点到下一节点路径类别,计算产生的总疲劳值,根据情况入队(优先队列实现的dijkstra)
  • 注意:c<=1e5, 计算过程中可能会出现 c*c 这种计算,使用int会爆int , 把整型全部设为long long 20%的数据
  • 别问我为什么知道那些百分比,说出来都是泪

#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
const LL INF = 1e9+10;
const LL maxn = 505;
typedef pair<LL,LL> P;vector<P>mp[maxn][maxn];
LL dist1[maxn],dist2[maxn],vis1[maxn],vis2[maxn];
LL n,m,t,a,b,c;
struct node
{LL id,totCost,daCost,xiaoCost,s;node(){}node(LL a,LL b,LL c) {id=a;totCost=b;s=c;}node(LL a,LL b,LL c,LL d){id=a;totCost=b;s=c;daCost = d;}friend bool operator<(const node& a,const node& b){if(a.totCost!=b.totCost)return a.totCost>b.totCost;return a.s>b.s;}
};priority_queue<node>priq;void init()
{while(!priq.empty()) priq.pop();for(LL i=0;i<maxn;i++){dist1[i] = dist2[i] = INF;vis1[i] = vis2[i]= 0;}for(LL i=0;i<maxn;i++)for(LL j=0;j<maxn;j++)mp[i][j].clear();}void input()
{cin>>n>>m;while(m--){cin>>t>>a>>b>>c;mp[a][b].push_back(P(t,c));mp[b][a].push_back(P(t,c));}
}void dijkstra()
{dist1[1] = dist2[1] = 0;vis2[1]=1;priq.push(node(1,0,0,0));while(!priq.empty()){node e = priq.top();priq.pop();LL now=e.id;LL totCost = e.totCost;LL daCost = e.daCost;LL s = e.s;if(s) vis2[now]=1;else vis1[now]=1;for(LL i=2;i<=n;i++){if(vis1[i]&&vis2[i]) continue;for(LL j=0;j<mp[now][i].size();j++){P xxx = mp[now][i][j];if(xxx.first){   // 这条路是小路LL len =  s+xxx.second;LL cost = daCost +len*len;    ///watch out!!    len*len>intif(cost<=dist2[i]) {dist2[i] = cost;priq.push(node(i,cost,len,daCost));}}else {                     // 这条路是大路LL cost = totCost + xxx.second;if(cost<=dist1[i]){dist1[i] = cost;priq.push(node(i,cost,0,cost));}}}}}
}int main()
{init();input();dijkstra();cout<<min(dist1[n],dist2[n])<<endl;return 0;
}

转载于:https://www.cnblogs.com/star-and-me/p/9623828.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/413337.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vue使用axios并存数据到state

npm安装 npm install axios --save main.js导入 // 引入axios&#xff0c;并加到原型链中 import Axios from axios import QS from qs Vue.prototype.$axios Axios Vue.prototype.qs QS 各子模块中使用&#xff0c;通过原型链 this.$axios ...... get实例 <div id&…

[css] 如何让IE6支持min-width和max-width?

[css] 如何让IE6支持min-width和max-width&#xff1f; 利用IE特有的css语法 .className {max-width:620px;min-width:1px;_width:expression(this.scrollWidth > 620 ? "620px":(this.scrollWidth < 1? "1px":"auto")); }个人简介 我…

tf.name_scope tf.variable_scope学习

1. 首先看看比较简单的 tf.name_scope(‘scope_name’). tf.name_scope 主要结合 tf.Variable() 来使用&#xff0c;方便参数命名管理。 Signature: tf.name_scope(*args, **kwds) Docstring: Returns a context manager for use when defining a Python op.# 也就是说&#x…

vue axios解决post传参数问题

我相信遇到这个问题的兄弟们&#xff0c;不带参数的情况下都是没有问题吧&#xff0c; 如果有问题&#xff0c;百度吧&#xff0c;好解决&#xff0c;答案都比较靠谱 这里主要针对带参数的情况&#xff0c;坑多 另外&#xff0c;我默认你用postman带参测试接口是没问题的 不…

[css] padding会影响到元素的大小,那不想让它影响到元素的宽度应该怎么办?

[css] padding会影响到元素的大小&#xff0c;那不想让它影响到元素的宽度应该怎么办&#xff1f; box-sizing:border-box个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识。放弃很容易&#xff0c; 但坚持一定很酷。欢迎大家一起讨论 主目录 与歌谣一起通关前端…

vue路由传参的三种基本方式

一&#xff1a; getDescribe(id) { // 直接调用$router.push 实现携带参数的跳转this.$router.push({path: /describe/${id},}) 方案一&#xff0c;需要对应路由配置如下&#xff1a; {path: /describe/:id,name: Describe,component: Describe} 很显然&#xff0c;需要在p…

[css] flex布局的缺点有哪些?(除兼容性外)

[css] flex布局的缺点有哪些&#xff1f;&#xff08;除兼容性外&#xff09; 无法直接定义列数(要使用百分比的方式实现)个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识。放弃很容易&#xff0c; 但坚持一定很酷。欢迎大家一起讨论 主目录 与歌谣一起通关前端…

vue router-link 添加点击事件

在vue学习中遇到给router-link 标签添加事件click 、mouseover等无效的情况 我想要做的是v-for遍历出来的选项卡&#xff0c; 鼠标移上去出现删除标签&#xff0c;移除标签消失的效果 原代码&#xff1a; <router-link v-for"(item, index) in pageMenuList"…

Spring Boot实践——基础和常用配置

借鉴&#xff1a;https://blog.csdn.net/j903829182/article/details/74906948 一、Spring Boot 启动注解说明 SpringBootApplication开启了Spring的组件扫描和Spring Boot的自动配置功能。实际上&#xff0c; SpringBootApplication将三个有用的注解组合在了一起。 Spring的Co…

[css] 你知道什么是面向对象的css(oocss)吗?有没有实践过?

[css] 你知道什么是面向对象的css&#xff08;oocss&#xff09;吗&#xff1f;有没有实践过&#xff1f; oocss(Object Oriented CSS)不是一种技术也不是一种语言&#xff0c;它是一种css的书写方法&#xff0c;其核心是用最简单的方式编写最整洁的css代码&#xff0c;使代码…

vue 实现页面静态化

实现思路 使用 this.$router.push(location) 来修改 url&#xff0c;完成页面路由跳转使用params来隐式传递url的参数&#xff0c;它类似post&#xff0c;url看不出&#xff0c;使用query来传递参数的话&#xff0c;类似get&#xff0c;url一定会被格式化为http://www.xxx.com…

BZOJ1226 SDOI2009学校食堂(状压dp)

由于Bi<7&#xff0c;考虑状压。 如果考虑前i个位置的话&#xff0c;状态里需要压入前7个人后7个人&#xff0c;显然是跑不动的。 那么改成考虑前i个人。于是设f[i][j][k]表示前i个人都已吃完饭&#xff0c;i1后面7个人的吃饭状态为j&#xff0c;最后一个吃饭的人是k的答案。…

vue实现监听滚动条

// 组件挂载后添加监听事件 mounted () {window.addEventListener(scroll, this.handleScroll) }, methods: {// 我这里监听的是侧边的滚动条handleScroll: () > {// 滚动时&#xff0c;距离顶部的距离var scrollTop document.documentElement.scrollTop || document.body.…

[css] 什么是hack?css的hack有哪些?

[css] 什么是hack&#xff1f;css的hack有哪些&#xff1f; 一、总结 1、CSS hack&#xff1a;由于不同厂商的浏览器&#xff0c;比如Internet Explorer,Safari,Mozilla Firefox,Chrome等&#xff0c;或者是同一厂商的浏览器的不同版本&#xff0c;如IE6和IE7&#xff0c;对CS…

Element组件 Drawer 抽屉的关闭问题

场景 我使用的Drawer 抽屉是从上往下开的效果&#xff0c;点击搜索图标&#xff0c;从上往下开没问题&#xff0c;输入关键字搜索&#xff0c;搜索出来的列表放置于搜索栏下面&#xff0c;所以使用了一个子组件 问题就来了 搜出来的列表item&#xff0c;点击任意一条&#x…

First Steps with TensorFlow代码解析

注&#xff1a;本文的内容基本上都摘自tensorflow的官网&#xff0c;只不过官网中的这部分内容在国内访问不了&#xff0c;所以我只是当做一个知识的搬运工&#xff0c;同时梳理了一遍&#xff0c;方便大家查看。本文相关内容地址如下&#xff1a; https://developers.google.c…

[css] 说说你对相对定位、绝对定位、固定定位的理解

[css] 说说你对相对定位、绝对定位、固定定位的理解 position 属性指定了元素的定位类型。position 属性的五个值&#xff1a;static&#xff08;默认值&#xff09; relative&#xff08;相对定位&#xff09; fixed&#xff08;固定定位&#xff09; absolute&#xff08;绝…

宝塔nginx运行vue项目刷新404问题解决

我的项目是webpack构建的&#xff0c;因为我做一切开发都想要希望要从一个标准的构建去编码 所以&#xff0c;我的项目在node下运行&#xff0c;开发&#xff0c;调试是没有一点问题的&#xff0c;npm run build也是完全OK的&#xff0c;vue路由是history模式 把build出来的d…

[css] css中的选择器、属性、属性值区分大小写吗?

[css] css中的选择器、属性、属性值区分大小写吗&#xff1f; 选择器和属性区分大小写&#xff0c;属性值如果是颜色可以不区分大小写吧个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识。放弃很容易&#xff0c; 但坚持一定很酷。欢迎大家一起讨论 主目录 与歌…

vscode设置中文,设置中文不成功问题

刚安装好的vscode界面显示英文&#xff0c;如何设置中文呢&#xff1f; 在locale.json界面设置”locale":"zh-cn"也未能实现界面为中文&#xff0c;在网上找了参考了&#xff0c;以下教程真实测试有效&#xff01; 首先&#xff1a; 下载插件&#xff1a;Chines…