突然意识到以前写的都是假的dij,感谢GhostCai神犇。

#include<iostream>
#include<cstdio>
#include<cstring>
#include<queue>
#define int long long using namespace std;
const int MAXN = ;
const int MAXM = ;
const int inf = ; inline int rd(){
int x=,f=;char ch=getchar();
while(!isdigit(ch)) {f=ch=='-'?:;ch=getchar();}
while(isdigit(ch)) {x=(x<<)+(x<<)+ch-'';ch=getchar();}
return f?x:-x;
} int n,m,S,dis[MAXN],head[MAXN],cnt;
int to[MAXM],nxt[MAXM],val[MAXM];
bool vis[MAXN]; struct Node{
int id,w;
friend bool operator<(const Node A,const Node B){
return A.w>B.w;
}
}; inline void add(int bg,int ed,int w){
to[++cnt]=ed,nxt[cnt]=head[bg],head[bg]=cnt,val[cnt]=w;
} priority_queue<Node> Q; void dijkstra(){
for(int i=;i<=n;i++) dis[i]=inf;
Node now;now.id=S;now.w=;dis[S]=;
int p,ww;Q.push(now);
while(!Q.empty()){
Node x=Q.top();Q.pop();p=x.id;ww=x.w;
if(vis[p] || dis[p]!=ww) continue;
vis[p]=;int u;
for(register int i=head[p];i;i=nxt[i]){
u=to[i];
if(dis[p]+val[i]<dis[u]) {
dis[u]=dis[p]+val[i];
now.id=u;now.w=dis[u];
Q.push(now);
}
}
}
} signed main(){
n=rd(),m=rd(),S=rd();int x,y,z;
for(int i=;i<=m;i++){
x=rd(),y=rd(),z=rd();
add(x,y,z);
}
dijkstra();
for(int i=;i<=n;i++) printf("%lld ",dis[i]);
return ;
}

最新文章

  1. Android中如何查看内存
  2. js⑥
  3. 关于flume中的几个疑惑
  4. 多路由器环境下路由器的入口IP地址及DHCP设置探讨
  5. yii学习小结
  6. ls -l命令详解
  7. mysql 数据库查询与实例。
  8. Android学习总结——文件储存
  9. 【计算几何初步-凸包-Jarvis步进法。】【HDU1392】Surround the Trees
  10. 【STL】关联容器 — hash_set
  11. python如何玩“跳一跳”!(windows安桌版本请进!)
  12. odoo开发笔记 -- 翻译机制及导入.po文件
  13. MySQL 术语
  14. MetaMask安装使用指南
  15. Android Sensor——传感器
  16. AJAX简单介绍
  17. webDAV服务的开启以及客户端的上传、下载、删除、新建文件夾、列表的代码(C#)
  18. docker使用现有容器生成新的镜像
  19. OO设计基本原则
  20. (转) sync命令

热门文章

  1. storm0.91集群部署
  2. matplotlib画图出现乱码情况
  3. Window下,前后端分离项目,登录权限验证中的,Redis相关操作
  4. .NET Core 3.0之深入源码理解Startup的注册及运行
  5. Pytorch模型定义的三要
  6. 基于第三方开源库的OPC服务器开发指南(3)——OPC客户端
  7. Buy Low, Buy Lower
  8. VS2010-MFC(常用控件:组合框控件Combo Box)
  9. mysql用户管理和pymysql
  10. iOS之SceneKit.h文件简介