#define IOS ios_base::sync_with_stdio(0); cin.tie(0);
#include <cstdio>//sprintf islower isupper
#include <cstdlib>//malloc exit strcat itoa system("cls")
#include <iostream>//pair
#include <fstream>//freopen("C:\\Users\\13606\\Desktop\\草稿.txt","r",stdin);
#include <bitset>
//#include <map>
//#include<unordered_map> https://www.luogu.org/problem/P4779
#include <vector>
#include <stack>
#include <set>
#include <string.h>//strstr substr
#include <string>
#include <time.h>//srand(((unsigned)time(NULL))); Seed n=rand()%10 - 0~9;
#include <cmath>
#include <deque>
#include <queue>//priority_queue<int, vector<int>, greater<int> > q;//less
#include <vector>//emplace_back
//#include <math.h>
//#include <windows.h>//reverse(a,a+len);// ~ ! ~ ! floor
#include <algorithm>//sort + unique : sz=unique(b+1,b+n+1)-(b+1);+nth_element(first, nth, last, compare)
using namespace std;//next_permutation(a+1,a+1+n);//prev_permutation
//******************
int abss(int a);
int lowbit(int n);
int Del_bit_1(int n);
int maxx(int a,int b);
int minn(int a,int b);
double fabss(double a);
void swapp(int &a,int &b);
clock_t __STRAT,__END;
double __TOTALTIME;
void _MS(){__STRAT=clock();}
void _ME(){__END=clock();__TOTALTIME=(double)(__END-__STRAT)/CLOCKS_PER_SEC;cout<<"Time: "<<__TOTALTIME<<" s"<<endl;}
//***********************
#define rint register int
#define fo(a,b,c) for(rint a=b;a<=c;++a)
#define fr(a,b,c) for(rint a=b;a>=c;--a)
#define mem(a,b) memset(a,b,sizeof(a))
#define pr printf
#define sc scanf
#define ls rt<<1
#define rs rt<<1|1
typedef long long ll;
const double E=2.718281828;
const double PI=acos(-1.0);
const ll INF=(1LL<<);
const int inf=(<<);
const double ESP=1e-;
const int mod=(int)1e9+;
const int N=(int)1e6+; struct EDGE
{
int to,next;
ll dis;
}edge[N];
struct node
{
int pos;
ll dis;
friend bool operator<(node a,node b)
{
return a.dis>b.dis;//priority_queue倒着排;
}
};
int tot;
int head[N];
ll dis[N];
bool vis[N]; void Init(int n)
{
for(int i=;i<=n;++i)
dis[i]=INF;
}
void add(int from,int to,ll cost)
{
++tot;
edge[tot].to=to;
edge[tot].dis=cost; //添加新的点
edge[tot].next=head[from]; //tot代表第几条边
head[from]=tot; //head指向最新的点(第几条边)
}
priority_queue<node> q;
void Dijkstra(int s)
{
dis[s] = ;
q.push({s,});
while( !q.empty() )
{
node tmp = q.top();
q.pop();
int x = tmp.pos;//, d = tmp.dis;
if( vis[x] )
continue;
vis[x] = ;
for( int i = head[x]; i; i = edge[i].next )
{
int y = edge[i].to;
if( dis[y] > dis[x] + edge[i].dis )
{
dis[y] = dis[x] + edge[i].dis;
if( !vis[y] )
{
q.push({y,dis[y]});
}
}
}
}
} int main()
{
// freopen("D:\\Chrome Download\\testdata (4).in","r",stdin);
int n,m,start;
sc("%d%d%d",&n,&m,&start);
Init(n);
for(int i=;i<=m;++i)
{
int u,v;
ll d;
sc("%d%d%lld",&u,&v,&d);
add(u,v,d);
}
Dijkstra(start);
for(int i=;i<=n;++i)
pr("%lld ",dis[i]);
return ;
} /**************************************************************************************/ int maxx(int a,int b)
{
return a>b?a:b;
} void swapp(int &a,int &b)
{
a^=b^=a^=b;
} int lowbit(int n)
{
return n&(-n);
} int Del_bit_1(int n)
{
return n&(n-);
} int abss(int a)
{
return a>?a:-a;
} double fabss(double a)
{
return a>?a:-a;
} int minn(int a,int b)
{
return a<b?a:b;
}

最新文章

  1. IOS中block和代理
  2. C语言小练习四
  3. TinyFox v2.3.2 正式发布,跨平台的.NET OWIN WEB服务器
  4. HDU 3111 Sudoku(精确覆盖)
  5. Java关系操作符简写
  6. c# Task编程一个task抛出异常后怎么取消其他线程
  7. ORA-12518 TNS:监听程序无法分发客户机连接 解决办法
  8. python 多级菜单 纯循环与分支
  9. C++设计模式——抽象工厂模式
  10. UltraISO安装centos7系统
  11. Linux搭建GIT 使用Eclipse创建并上传Git项目 EGit操作
  12. ide phpStorm管理远程主机
  13. Android内存优化之内存缓存
  14. redis主从复制几种结构
  15. 【Android】详解Android Activity
  16. CodeM Qualifying Match Q2
  17. JVM内存管理的机制
  18. IT行业的个人见解
  19. 【BZOJ2830/洛谷3830】随机树(动态规划)
  20. 一个简单的爆破 mysql 远程连接脚本(perl6)

热门文章

  1. Java面向对象1(A~F)
  2. 物联网是前端工程师的新蓝海吗? | Live笔记
  3. javascript数据结构之队列
  4. Mybatis源码学习之DataSource(七)_2
  5. 8.5 JavaScript的BOM(二)
  6. Celery分布式队列学习
  7. Android Dalvik、ART及APK编译过程
  8. NaN情况下无法比较大小
  9. 02 MySQL之数据表的基本操作
  10. 错误 MSB6006 CL.exe 已退出,代码为2