Cod sursa(job #2949857)

Utilizator Ilie_MityIlie Dumitru Ilie_Mity Data 1 decembrie 2022 22:50:07
Problema Algoritmul lui Dijkstra Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1 kb
//Ilie Dumitru
#include<cstdio>
#include<vector>
#include<queue>
const int inf=1000000007;
const int NMAX=50005;

struct edge
{
	int node, cost;

	friend bool operator<(edge a, edge b)
	{
		return a.cost>b.cost;
	}
};

std::vector<edge> G[NMAX];
int minDist[NMAX];
int N;

void dijkstra()
{
	int i, x, n, m, c;
	std::priority_queue<edge> pq;
	for(i=1;i<N;++i)
		minDist[i]=inf;
	pq.push({0, 0});
	do
	{
		n=pq.top().node;
		c=pq.top().cost;
		pq.pop();
		if(minDist[n]==c)
		{
			for(i=0;i<(int)G[n].size();++i)
			{
				m=G[n][i].node;
				x=c+G[n][i].cost;
				if(x<minDist[m])
				{
					minDist[m]=x;
					pq.push({m, x});
				}
			}
		}
	}while(!pq.empty());
	for(i=1;i<N;++i)
		printf("%d ", minDist[i]%inf);
}

int main()
{
	freopen("dijkstra.in", "r", stdin);
	freopen("dijkstra.out", "w", stdout);
	int i, _, x, y, w;
	scanf("%d%d", &N, &_);
	for(i=0;i<_;++i)
	{
		scanf("%d%d%d", &x, &y, &w);
		G[x-1].push_back({y-1, w});
	}
	dijkstra();
    return 0;
}