(严查出题者成分..

题目描述

绰号 "小孤独" 的后藤独,是一位喜爱吉他的孤独少女。 她经常在家里独自弹奏吉他,但因为一些事情,加入了伊地知虹夏领衔的 “纽带乐队”。 不敢在他人面前演奏的后藤,能否成为一个出色的乐队成员呢?

哈... 尽管故事没有结束... 但可以确定的是,现在,在学校的文化节上,为了参加表演, 她必须从教学楼里,走到隔壁的体育馆里去。

因为文化节的缘故,到处都挤满了同学,社恐的后藤同学好像马上就要融化了。 参加活动的同学们,都聚集在一些教室或者摊位附近,为了前往体育馆,"小孤独" 不得不穿越一些人群。

你必须赶在这位吉他英雄升天前,帮她规划出一条前往体育馆的路线, 首先要保证的当然是,路上遇到的人越少越好,其次的话,总路程也是越短越好.

请告诉小孤独,她最少会遇到多少人,要走多少路。

输入描述

第一行,四个正整数 n, m, s, t,分别代表 有 n 个挤满了人的地点, 有 m 条连着两个地点的路,使得两个地点间可以双向通行, 小孤独正在第 s 个地点,而体育馆是第 t 个地点。(n,m≤10^5)

第二行,n 个用空格分开的整数 ai​ (0≤ai≤200, i∈[1,n]) 第 i 个数字表示第 i 个地点处有 ai​ 个人

接下来 mm 行,每行 33 个正整数 u v w 代表 第 u 个地点 和 第 v 个地点 之间有一条长度为 w 的双向道路 (1≤w≤10^9)

输出描述

两个整数,遇到的总人数和总路程,中间用空格隔开。

样例输入

5 5 1 5
1 10 10 20 100
1 2 1
2 3 1
1 4 1
4 5 100
3 5 1 

样例输出

121 3 

分析

典型的最短路径问题,第一标尺是最少人数,第二标尺是最短路程。由于1e5的数据规模,限制了最短路径算法只能使用SPFA或者堆优化的Dijkstra。

这里选择堆优化的Dijkstra,用STL的priority_queue模拟堆来维护源点到未选取点集的最短边(d[u]),定义结构体类型的node结点,使优先队列和邻接表配合使用。

要注意的是,d数组要开long long,否则会超范围。

#include <iostream>
#include <vector>
#include <queue>
using namespace std;const int N = 1e5 + 10;
const int INF = 1e9;
int n, m, s, t;
int c[N];struct node{int id, w, num;node(int id_, int num_, int w_ = 0):id(id_), num(num_), w(w_) {}bool operator < (const node &W) const {return num > W.num;}
};vector<node> g[N];
bool vis[N] = {false};
long long d[N], v[N];void dj() {fill(d, d + N, INF);fill(v, v + N, INF);v[s] = c[s];d[s] = 0;priority_queue<node> q;q.push(node(s, v[s]));while(!q.empty()) {node front = q.top();q.pop();int u = front.id;//cout << "u=" << u << endl;        if(u == t) break;if(vis[u] == true) continue;vis[u] = true;for(int j = 0; j < g[u].size(); j++) {int id = g[u][j].id;int w = g[u][j].w;if(vis[id] == false) {if(v[u] + c[id] < v[id]) {v[id] = v[u] + c[id];q.push(node(id, v[id]));d[id] = d[u] + w;//cout << id << " " << v[id] << " " << d[id] << endl;} else if(v[u] + c[id] == v[id] && d[id] > d[u] + w) {d[id] = d[u] + w;//cout << id << " " << v[id] << " " << d[id] << endl;}}}}
}int main() {cin >> n >> m >> s >> t;int x, y, w;for(int i = 1; i <= n; i++) {scanf("%d", &c[i]);}for(int i = 1; i <= m; i++) {scanf("%d%d%d", &x, &y, &w);g[x].push_back(node(y, c[y], w));g[y].push_back(node(x, c[x], w));}dj();cout << v[t] << " " << d[t] << endl;return 0;
}

NUIST LevOJ P1857 孤独摇滚相关推荐

  1. NUIST LevOJ P1763 friendly group

    题目描述 Professor Alex will organize students to attend an academic conference. Alex 教授将要组织学生参加学术会议. Al ...

  2. NUIST LevOJ P1684 炼丹术

    题目描述 三水最近在学习炼丹术.但是众所周知炼丹术是一门危险的学科,需要大量的调参才能保证安全.好在三水在洗衣机里面找到了一张失传已久的图纸,里面记录了若干种材料的药性.这张图纸上记录了 n 种不同的 ...

  3. NUIST LevOJ P1826 荷取的基站布局 (状态压缩dp

    题目描述 草根妖怪网络科技有限公司正委托河童重工架设若干个基站. 架设地点可以抽象成一个 n * n 的方格阵.每个基站提供信号的范围是其临近的上下左右四格(如果存在) 为了避免资源浪费,需要保证对于 ...

  4. 首届 Rust China Hackathon Online 参赛队伍名单出炉

    Rust for Fun! 首届 Rust China Hackathon Online 参赛队伍名单新鲜出炉,恭喜如下队伍.从明天(12月15日)开始就可以开始比赛了. 请注意赛程安排: 赛程安排 ...

  5. 精彩回顾 I Rust China Hackathon 2022 达坦科技组

    由Rust中文社区举办的题为「Rust For Fun」的首届Rust China Hackathon已经顺利完赛.达坦科技作为本届Hackathon的协办方,赞助参与本次企业组赛道.达坦科技组的赛题 ...

  6. RSS Can:使用 Golang Rod 解析浏览器中动态渲染的内容:(四)

    第四篇文章,来聊聊 Golang 生态中如何"遥控"浏览器,更简单.可靠的使用基于 CDP (Chrome DevTools Protocol)协议的浏览器作为容器,获取诸如微博. ...

  7. 网易云VIP音乐NCM文件转MP3,C语言版本

    前言 网易云的Vip音乐下载下来,格式不是mp3/flac这种通用的音乐格式,而是经过加密的ncm文件.只有用网易云的音乐App才能够打开.于是想到可不可以把.ncm文件转换成mp3或者flac文件, ...

  8. 刘翔跟着崔健孤独地飞了

    [b][size=medium]刘翔跟着崔健孤独地飞了[/size][/b] 作者 /张晓舟来源 /张晓舟博客 我垃圾成山的专栏写作生涯中,有两篇文章有着诡异的命运,其影响力远远超过了原有领域:< ...

  9. 好听的摇滚_中国摇滚最经典的十大经典老歌,令无数歌迷疯狂,首首好听到爆!...

    10.<怒放的生命> <怒放的生命>是由汪峰作词,汪峰作曲,由汪峰演唱.这首歌也是第13届全球华语音乐榜中榜年度最佳歌曲奖. 8.<孤独的人是可耻的> <孤独 ...

最新文章

  1. 如何提高模型性能?这四大方法值得尝试 | CSDN 博文精选
  2. Django实战之美化页面
  3. 微会动微信现场互动:2019年会展和活动产业的发展趋势
  4. Centos安装tomcat,haproxy,jdk
  5. optee中添加一个中断以及底层代码的相关解读
  6. Php错误邮件提示linux,linux下phpmailer发送邮件出现SMTP ERROR: Failed to connect to server: (0)错误...
  7. LeetCode 1278. 分割回文串 III(区间DP)
  8. 七年级认识计算机课件,认识计算机(七年级)ppt课件
  9. 中科曙光:与VMware合资公司是技术公司
  10. 猴子爬山编程java_Java趣味编程100例
  11. Linux经常使用到的操作
  12. java 线程意外中断重启处理办法(观察者模式)
  13. 【Excel2019(六):数据透视表】【创建数据透视表+更改数据透视表汇总方式+数据透视表中的组合+汇总多列数据+创建计算字段+生成多张工作表】
  14. 华大MCU(五):HC32F460串口IAP升级boot部分
  15. 书籍《图说区块链》读后感
  16. VOLTE_SRVCC和ESRVCC
  17. 视频教程-用Java从零开始开发一个物联网项目-物联网技术
  18. 移动应用崩溃日志收集工具对比
  19. 计算二维紧束缚模型费米面和nesting程序新思路
  20. cad高程测绘图lisp_已知CAD中的高程测绘图,很多点,如何求出所有高程的平均值呢?难道只能用计算器一个一个的相加来算吗?...

热门文章

  1. Makefile .depend
  2. ECMA Script 学习笔记
  3. GRPC(5):名字解析器
  4. http://extasp.net/ 浴火重生
  5. 2020新春战疫网络安全公益赛——MISC套娃
  6. HALCON 简单介绍
  7. Java--SpringBoot使用@Transactional注解添加事务
  8. 怎么消除大腿上的妊娠纹,它让你美爆整个夏天
  9. JavaWeb,HTTP和Tomcat
  10. NOIP 2021 游记