博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
LightOJ1074Extended Traffic(bellman_ford最短路+负环标记)
阅读量:5138 次
发布时间:2019-06-13

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

题意

T组样例,N个地点,每个地点有个繁忙度,地点间有M条街道,每条街道要收过路费(目的地繁忙度-起点繁忙度)^3 (3次方),有Q个查询,包含Q个目的地,求从起点1到每个目的地的最小花费。如果花费小于3或者无法到达目的地,则输出"?"

解题思路

由于目的地繁忙度不一定大于起点繁忙度,所以图中有负环(一开始没想到,直接用dijkstra一直WA),所以要用bellman_ford来求最短路,当某些地点位于负环内,就肯定最终花费小于3。

AC代码

#include
using namespace std;typedef long long ll;typedef pair
pii;const int maxn = 1e3+5;const int maxm = 1e6+5;const int inf = 0x2f3f3f3f; //这里给值小于初始dis数组赋值,原因可能是在跑bellman_ford的时候,负环和目的地的值相加变小了,直接判断目的地的值等于初始值的话,会waint N,M;int A[maxn];struct Edge { int from,to,cost;};int dis[maxn];bool vis[maxn];Edge G[maxm];void bellman_ford(){ memset(dis,0x3f,sizeof(dis)); dis[1] = 0; for(int i=1;i<=N;i++){ for(int j=0;j
> T; int Case = 1; while(T--){ cin >> N; for(int i=1;i<=N;i++){ cin >> A[i]; } cin >> M; int a,b; Edge e; memset(vis,0,sizeof(vis)); for(int i=0;i
> a >> b; e.from = a; e.to = b; e.cost = pow(A[b]-A[a],3); G[i] = e; } int Q = 0; cin >> Q; cout << "Case " << Case++ << ":" << endl; bellman_ford(); for(int i=0;i
> t; if(dis[t] < 3 || dis[t]>=inf || vis[t]){ cout << "?" << endl; }else{ cout << dis[t] << endl; } } } return 0;}

转载于:https://www.cnblogs.com/django-lf/p/9739450.html

你可能感兴趣的文章
第七章 软件测试 课后习题
查看>>
一篇非常适合git入门的文章
查看>>
四级英语day10
查看>>
基于K-近邻分类算法的手写识别系统
查看>>
使用easyui的form提交表单,在IE下出现类似附件下载时提示是否保存的现象
查看>>
PC站跳转M站的方法
查看>>
wow 各职业体验(pvp)
查看>>
Streaming的receiver模式
查看>>
[转载]一个人的失败,99%失败于“脾气”
查看>>
一个简单的MDI示范程序(Delphi)
查看>>
统计实验数据 总结实验结果
查看>>
Spring 3.x MVC 入门4 -- @ResponseBody & @RequestBody
查看>>
62. Unique Paths
查看>>
Linux Linux程序练习十七
查看>>
数据库关系运算
查看>>
JavaSE基础之 IO流
查看>>
DDoS攻防战 (一) : 概述
查看>>
根据现有PDF模板填充信息(SpringBoot)
查看>>
div+css布局的好处
查看>>
《需求工程——软件建模与分析》阅读笔记一
查看>>