Road ConstructionAOJ2249

2024-01-22 18:48
文章标签 road constructionaoj2249

本文主要是介绍Road ConstructionAOJ2249,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

题目链接

思路:简单的dijkstra算法,最短路径计算时顺便递推最小花费

分享一个错误思路:在路径计算时小于和等于最短路径的情况没有区分,都按照cost[r.to] = min(cost[r.to], r.cost);计算,错误原因是之前可能存了一个小值,但不是最短路径对应的值

#include <cstdio>
#include <iostream>
#include <fstream>
#include <cstring>
#include <vector>
#include <queue>
const int MAX = 20010;
const int maxn = 20010;
const int INF = 1e9;using namespace std;struct road_{int to, dis, cost;road_ (){}road_ (int a, int b, int c){to = a;dis =b;cost=c;}
};
typedef pair <int, int> P;
vector <road_> road[MAX];int N, M;
int cost[MAX];
int dis[MAX];//思路: dijkstra算法,在更新最短距离时,如果最短距离相等,保留最小的花费 
void Dijkstra(){fill(dis, dis+MAX, INF);fill(cost, cost+MAX, INF);dis[1] = 0;cost[1]=0;priority_queue <P, vector<P>, greater<P> > que;que.push(P(0,1));while(!que.empty()){P p = que.top();int v = p.second;que.pop();if(dis[v] < p.first)continue;//更新距离 for(int i=0; i<road[v].size(); i++){road_ r = road[v][i];if(dis[r.to] < dis[v] + r.dis) continue;//如果小于最短距离,更新距离入队,更新花费 if(dis[r.to] > dis[v] + r.dis) {dis[r.to] = dis[v] + r.dis;cost[r.to]	= r.cost;que.push(P(dis[r.to], r.to));}//等于最短距离,比较大小elsecost[r.to] = min(cost[r.to], r.cost);}		}
}//测试函数 
int main(){
/*	ifstream cin ("D:\\钢铁程序员\\程序数据\\067道路修建.txt");//从文件读取数据流,省去手动输入的麻烦 if(!cin){//读取如果失败 cout << "ERROR" << endl;}*/int n,m,a,b,c,d;while(cin>>n>>m){if(n==0&&m==0) break;for(int i=0;i<maxn;i++) road[i].clear();for(int i=0;i<m;i++){cin >> a >> b >> c >> d;road[a].push_back(road_(b,c,d));road[b].push_back(road_(a,c,d));}Dijkstra();int sum = 0;for(int i=1; i<=n; i++)sum += cost[i];cout << sum << endl;}//   cin.close();return 0;
}

 

 

 

这篇关于Road ConstructionAOJ2249的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/633903

相关文章

【UVALive】5713 Qin Shi Huang's National Road System 最小生成树

传送门:【UVALive】5713 Qin Shi Huang's National Road System 题目大意:秦朝有n个城市,需要修建一些道路使得任意两个城市之间都可以连通。道士徐福声称他可以用法术修路,不花钱,也不用劳动力,但只能修一条路,因此需要慎重选择用法术修哪一条路。秦始皇不仅希望其他道路的总长度B尽量短(这样可以节省劳动力),还希望法术连接的两个城市的人口之和A尽量大,因此下

hdu 1598 find the most comfortable road (并查集 + 枚举)

题目:         链接:点击打开链接 思路:         对边排序,再枚举每条边,如果出现通路(findset(x) == findset(y))就结束。 代码: #include <iostream>#include <cstdio>#include <cstring>#include <algorithm>using namespace std;#define

poj 3352 Road Construction(边连通+tarjan+缩点)

http://poj.org/problem?id=3352 题意:简化一下原题题意,意思就是给定一个连通图,问至少要加入几条边使得整个图变成一个边连通图,即图中任意两点都有两条以上的路径(不一定直接相连)。 思路:tarjan算法,设置一个low数组,在建立深搜树的过程中,我们会得到每个节点的low值,对于low值相等的节点在同一个双连通分量中。由于在同一个边连通分量中的点的“地

Road-SLAM:基于道路标线车道级精度SLAM

文章:Road-SLAM : Road Marking based SLAM with Lane-level Accuracy 作者:Jinyong Jeong, Younggun Cho, and Ayoung Kim1 编译:点云PCL 本文仅做学术分享,如有侵权,请联系删除。欢迎各位加入免费知识星球,获取PDF论文,欢迎转发朋友圈。内容如有错误欢迎评论留言,未经允许请勿转载! 对本文以及俯

道路 Road(百练,POJ)

题目链接: 1724 -- ROADS (poj.org) 题目描述: 思路: 这题目乍一看,是一个含有2个标尺的单源最短路问题,挺难处理的。 既然没法直接用最短路处理,那我们就“记录信息”,将花费的时间也记录进dp数组,然后跑“状态最短路”。 用f[i][j] 表示到达点i 且 总花费时间为j的最短距离,然后跑堆优化的dijkstra算法就好。由于不含有负边权,因此可以搞一个vis数

【语义分割】——又快又强:Deep Dual-resolution Networks for Real-time and Accurate Semantic Segmentation of Road

出处:哈尔滨工业大学 论文 code:暂未开源 关键词: 实时语义分割 语义分割是自动驾驶汽车了解周围场景的关键技术,对于实际的自动驾驶汽车来说,为了获得高精度的分割结果而花费大量的推理时间是不可取的。使用轻量级架构(编码器解码器或two-pathway)或推理在低分辨率图像。本文提出的模型在单张2080ti上DDRNet-slim能打到77.4% mIoU和230FPS,DDRNet

uva 1494 - Qin Shi Huang's National Road System(最小生成树)

题目链接:uva 1494 - Qin Shi Huang's National Road System 建成最小生成树之后,枚举两节点,然后删除路径上权值上最大的边。 #include <cstdio>#include <cstring>#include <cmath>#include <vector>#include <algorithm>using namespa

通往糊涂之路 The road to serfdom

最近被推送了一本书,哈耶克的............ 试一试,看看能不能看懂,也许是通往糊涂之路。

Internet Strategy: The Road to Web Services Solutions

版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文章原始出版、作者信息和本声明。否则将追究法律责任。 http://blog.csdn.net/topmvp - topmvp Internet Strategy: The Road to Web Services Solutions reminds readers that several attempts have been m

HDU - 1596 find the safest road(Floyd算法)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1596 Problem Description XX星球有很多城市,每个城市之间有一条或多条飞行通道,但是并不是所有的路都是很安全的,每一条路有一个安全系数s,s是在 0 和 1 间的实数(包括0,1),一条从u 到 v 的通道P 的安全度为Safe§ = s(e1)*s(e2)…*s(ek) e1,