博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Dijkstra算法 Atcoder-070-D
阅读量:4114 次
发布时间:2019-05-25

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

题意:

给你一棵无向树,然后给你一个点K,q个查询,每个查询一个x一个y,问从x到y经过k的最短路径

题目链接:

其实这个就是一个单源最短路的问题,以k为单源点,求k到每个点的最短距离,d[i],然后,从x到y的最短路径就是d[x]+d[y];

这个题目转化一下思维方式就行了

注意点:

这是一个无向树,在构造边的时候要注意,两个方向都要加上

代码如下:

#include 
#include
#include
#include
#include
#include
using namespace std;const int MAXN=1e5+50;const long long INF=1e18;int n;int k,p;long long dis[MAXN];int vis[MAXN];struct Edge{ int from; int to; int cost; Edge(int a,int b,int c) { from=a; to=b; cost=c; }};vector
edges;vector
G[MAXN];void Init(){ for(int i=0; i<=n; i++) G[i].clear(); edges.clear();}struct Heap{ int d,u; Heap(int a,int b) { d=a,u=b; } bool operator<(Heap h)const { return d>h.d; }};void Dijkstra(int s){ priority_queue
p; p.push(Heap(0,s)); for(int i=0; i<=n; i++) dis[i]=INF; dis[s]=0; memset(vis,0,sizeof(vis)); while(!p.empty()) { Heap h=p.top(); p.pop(); int u=h.u; if(vis[u]) continue; for(int i=0; i
dis[u]+e.cost) { dis[e.to]=dis[u]+e.cost; p.push(Heap(dis[e.to],e.to)); } } }}int main(){ scanf("%d",&n); Init(); for(int i=0; i

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

你可能感兴趣的文章
postgresql监控工具pgstatspack的安装及使用
查看>>
【JAVA数据结构】双向链表
查看>>
【JAVA数据结构】先进先出队列
查看>>
乘法逆元
查看>>
Objective-C 基础入门(一)
查看>>
Flutter Boost的router管理
查看>>
iOS开发支付集成之微信支付
查看>>
C++模板
查看>>
【C#】如何实现一个迭代器
查看>>
【C#】利用Conditional属性完成编译忽略
查看>>
DirectX11 光照演示示例Demo
查看>>
VUe+webpack构建单页router应用(一)
查看>>
Node.js-模块和包
查看>>
(python版)《剑指Offer》JZ01:二维数组中的查找
查看>>
Spring MVC中使用Thymeleaf模板引擎
查看>>
PHP 7 的五大新特性
查看>>
深入了解php底层机制
查看>>
PHP中的stdClass 【转】
查看>>
XHProf-php轻量级的性能分析工具
查看>>
OpenCV gpu模块样例注释:video_reader.cpp
查看>>