huangwenlong and hanqihong开光的dijkstra

#include<iostream>
#include<vector>
#include<queue>
#include<cstring>
#include<algorithm>
using namespace std;

int n,m,s;
struct way
{
	int to;
	int cost;
};
vector <way> map[10001];
typedef pair<long long,int> hanqihong;
priority_queue < hanqihong, vector<hanqihong> , greater<hanqihong> > q;
long long dis[10001];
bool vis[10001];

void dj()
{
	for(int i=1;i<=n;i++)
		dis[i]=2147483647;
	dis[s]=0;
	q.push(make_pair(dis[s],s));
	while(!q.empty())
	{
		int u=q.top().second;
		q.pop();
		if(vis[u])
			continue;
		vis[u]=1;
		for(unsigned int i=0;i<map[u].size();i++)
		{
			int v=map[u][i].to;
			if(dis[u]+map[u][i].cost<dis[v])
			{
				dis[v]=dis[u]+map[u][i].cost;
				q.push(make_pair(dis[v],v));
			}
		}
	}
}

int main()
{
	ios::sync_with_stdio(false);
	cin>>n>>m>>s;
	for(int i=0;i<m;i++)
	{
		int u;
		way a;
		cin>>u>>a.to>>a.cost;
		map[u].push_back(a);
	}
	
	dj();
	
	for(int i=1;i<=n;i++)
		cout<<dis[i]<<" ";
	return 0;
}
posted @ 2017-11-06 16:39  syhien  阅读(149)  评论(0编辑  收藏  举报