博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
CSP 2017_12_4行车路线
阅读量:4217 次
发布时间:2019-05-26

本文共 1521 字,大约阅读时间需要 5 分钟。

题目链接:
思路:
dijkstra + 优先队列 + 记忆数组

minRoadLen[MAXN]记录每个节点连续的小路长度
dis数组记录疲劳值
这里面的 需要用 long long类型存储dis
#include
#include
#include
#define INF 0x3f3f3f3f#include
#define MAXN 505#define MAXM 100005using namespace std;typedef long long ll;int n, m;struct Edge{ int to,t,w; Edge(){} Edge(int pt, int pto ,int pw){ t = pt; to = pto; w = pw; } bool operator < (const Edge o)const{ return w > o.w; }};ll square(ll a){ return a*a;}ll dis[MAXN];bool vis[MAXN];ll minRoadLen[MAXN];vector
adj[MAXN];int dijkstra(int s) { priority_queue
pq; for(int i = 1; i <= n; ++i){ vis[i] = false; dis[i] = INF; minRoadLen[i] = 0; } dis[s] = 0; pq.push(Edge(-1,s,0)); while(!pq.empty()){ Edge tmp = pq.top(); int cur = tmp.to; if(cur == n){ return dis[n]; } vis[cur] = true; pq.pop(); for(int i = 0; i < adj[cur].size(); ++i){ Edge e = adj[cur][i]; if(e.t == 0){//大道 if(dis[e.to] > dis[cur] + e.w){ dis[e.to] = dis[cur] + e.w; pq.push(Edge(-1,e.to,dis[e.to])); minRoadLen[e.to] = 0; } } if(e.t == 1){ ll curShortLen = minRoadLen[cur] + e.w; ll curDis = dis[cur]-square(minRoadLen[cur]) + square(curShortLen); if(curDis < dis[e.to]){ dis[e.to] = curDis; minRoadLen[e.to] = curShortLen; pq.push(Edge(-1,e.to,dis[e.to])); } } } } }int main() { int t,from,to,w; scanf("%d%d",&n,&m); for(int i = 1; i <= m; ++i){//注意 不要写成n了 scanf("%d%d%d%d",&t,&from,&to,&w); adj[from].push_back(Edge(t,to,w)); adj[to].push_back(Edge(t,from,w)); } ll ans = dijkstra(1); printf("%d\n",ans); return 0; }

转载地址:http://kqimi.baihongyu.com/

你可能感兴趣的文章
app自动化测试---ADBInterface驱动安装失败问题:
查看>>
RobotFramework+Eclipse安装步骤
查看>>
测试的分类
查看>>
photoshop cc2019快捷键
查看>>
pycharm2019版本去掉下划线的方法
查看>>
九度OJ 1091:棋盘游戏 (DP、BFS、DFS、剪枝)
查看>>
leetcode 13: Roman to Integer
查看>>
a标签中调用js方法
查看>>
js函数中传入的event参数
查看>>
[hive]优化策略
查看>>
c++14现代内存管理
查看>>
右值引用,move语义和完美转发
查看>>
c++使用宏检测类是否包含某个函数或者变量属性
查看>>
CSS之Multi-columns的column-gap和column-rule
查看>>
CSS之Multi-columns的跨列
查看>>
CSS之浮动(一)
查看>>
CSS之浮动(二)
查看>>
AtomicInteger源码解析
查看>>
CopyOnWriteArraySet源码学习
查看>>
Openfiler 配置 NFS 示例
查看>>