题目链接:https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1459

题意:中文题诶~

思路:带权值的最短路,这道题数据也没啥特殊,spaf,floyd, dijkstra 都可以过,我这里就写个dijkstra好了...

dijkstra算法和最小生成树的prime有点像,prime算法是将所有点分成两个点集s, w,初始时s中只有一个点,然后依次将w中距离s集合最近的点加入s集合中,直至w为空集..

这两个算法的区别是dijkstra还要依次以点集s为中间点来更新点集w中的点到出发点的最小距离,最终自然能得到出发点到终止点的最小距离啦..

dijkstra模板中更新出发点到w点集的距离时不需要考虑距离相同的情况,而本题则需要更新为权值更大的点即可...

 #include <bits/stdc++.h>
#define INF 1000000000
#define MAXN 1000
using namespace std; int mp[MAXN][MAXN], low[MAXN], tag[MAXN], n, m, rank[MAXN], vis[MAXN];
// low[j]记录出发点到点j的最短距离,tag[j]标记点j是否被选中过, vis[j]记录出发点到点j的最大权值 void dijkstra(int s, int e){
for(int i=; i<n; i++){ //初始化
low[i]=mp[s][i];
}
vis[s]=rank[s];
low[s]=;
for(int i=; i<n; i++){
int MIN=INF;
for(int j=; j<n; j++){
if(low[j]<MIN&&!tag[j]){
MIN=low[j];
s=j;  //s为当前选中的点
}
}
tag[s]=;
for(int j=; j<n; j++){ //更新各点到出发点的最小距离
if(low[j]>mp[s][j]+low[s]){
low[j]=mp[s][j]+low[s];
vis[j]=vis[s]+rank[j];
}else if(low[j]==mp[s][j]+low[s]){ //若距离相等则更新权值更大的点
vis[j]=max(vis[s]+rank[j], vis[j]);
}
}
}
cout << low[e] << " " << vis[e] << endl;
} int main(void){
int s, e;
cin >> n >> m >> s >> e;
for(int i=; i<n; i++){
cin >> rank[i];
}
for(int i=; i<n; i++){
for(int j=; j<n; j++){
mp[i][j]=mp[j][i]=INF;
}
}
while(m--){
int x, y, z;
cin >> x >> y >> z;
mp[x][y]=mp[y][x]=z;
}
dijkstra(s, e);
return ;
}

51nod1459(带权值的dijkstra)的更多相关文章

  1. HDU 1863:畅通project(带权值的并查集)

    畅通project Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total ...

  2. 洛谷 P2024 [NOI2001]食物链——带权值的并查集维护

    先上一波题目 https://www.luogu.org/problem/P2024 通过这道题复习了一波并查集,学习了一波带权值操作 首先我们观察到 所有的环都是以A->B->C-> ...

  3. 带权值的LCA

    例题:http://poj.org/problem?id=1986 POJ1986 Distance Queries Language: Default Distance Queries Time L ...

  4. nyoj-----284坦克大战(带权值的图搜索)

    坦克大战 时间限制:1000 ms  |  内存限制:65535 KB 难度:3   描述 Many of us had played the game "Battle city" ...

  5. 带权值的图 BFS

    用bfs遍历最图求最短路径时通常借用优先队列即优先考虑最大的或者最小的权值 方法1 优先队列:(内置函数,优先考虑较小的权值) #include<iostream> #include< ...

  6. 51nod1459 带权最短路

    1459 迷宫游戏 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题 你来到一个迷宫前.该迷宫由若干个房间组成,每个房间都有一个得分,第一次进入这个房间,你就可以得到这个分 ...

  7. hdu 3790 最短路径问题(双重权值,dijkstra算法)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3790 题目大意:题意明了,输出最短路径及其花费. 需要注意的几点:(1)当最短路径相同时,输出最小花费 ...

  8. P - 奔小康赚大钱 - hdu 2255(带权值的匹配)

    分析:这是一个KM的模板题,也就不多说了,KM最复杂的情况都能过,下面是没有优化过的代码: ****************************************************** ...

  9. hdu 4771 Stealing Harry Potter's Precious (2013亚洲区杭州现场赛)(搜索 bfs + dfs) 带权值的路径

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4771 题目意思:'@'  表示的是起点,'#' 表示的是障碍物不能通过,'.'  表示的是路能通过的: ...

随机推荐

  1. UVA1585

    #include<stdio.h> #include<string.h> int main(){ int n; ]; scanf("%d",&n); ...

  2. Android Studio如何减小APK体积

    最近在用AndroidStudio开发一个小计算器,代码加起来还不到200行.但是遇到一个问题,导出的APK文件大小竟然达到了1034K.这不科学,于是就自己动手精简APK.下面我们大家一起学习怎么缩 ...

  3. LINQ函数

    LINQ函数虽然和LINQ语句实现了同样的功能,但LINQ函数使用起来更加快捷.学过数据库的感觉LINQ语句都不难,但语句比较长. 会LINQ函数,才算会LINQ. 1.Where(),结果过滤 Li ...

  4. R语言获取数据类型信息的一些有用函数

    向量.因子.时间序列x[i]:  矩阵.数据框x[i, j] x[i, ] x[, j]:  数组就是根据维度多打几个逗号而已x[i, j, k, -]:  列表要用双重中括号x[[i]].  特殊的 ...

  5. SharePoint Online 申请试用链接地址

    SharePoint Online 申请试用链接地址: https://products.office.com/en-us/business/compare-office-365-for-busine ...

  6. 报错:init: Could not find wglGetExtensionsStringARB!

    如下操作即可恢复:

  7. Java多线程 5 多线程其他知识简要介绍

    一.线程组 /** * A thread group represents a set of threads. In addition, a thread * group can also inclu ...

  8. 在 .NET 中开发基于 Chrome 内核的浏览器-创建一个简单浏览器

    首先在 http://www.cftea.com/tools/downloads/Cef.zip 下载文件包. 一.将文件解压拖入到 Visual Studio 对应的 WinForm 项目中. 二. ...

  9. Github .gitignore详解

    在使用git作版本控制时,git会默认把git控制的文件夹里面的所有文件都加入到版本控制.但是在实践中,我们经常会遇到不想某些文件或文件夹被git追踪的情况.比如logs文件.代码构建过程中产生的一些 ...

  10. Java优先队列

    按照Java api的说法: java.util.PriorityQueue.PriorityQueue() Creates a PriorityQueue with the default init ...