Cod sursa(job #2506475)

Utilizator TudorChirila11Tudor Chirila TudorChirila11 Data 8 decembrie 2019 11:24:19
Problema Algoritmul lui Dijkstra Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.93 kb
#include<bits/stdc++.h>
#define st first
#define nd second
#define pb push_back
using namespace std;
typedef long long ll;
FILE *fin=fopen("dijkstra.in","r");
FILE *fout=fopen("dijkstra.out","w");
const int INF= 500*200000, N=50005;
int n, m, i, j, ans[N], x, y, z;
priority_queue <pair<int,int>,vector<pair<int,int> >,greater<pair<int,int> > > pq;
vector<pair<int,int> > v[N];
bool queued[N], used[N];
void dijk(int nod)
{
	pq.push({0,1});
	while(!pq.empty())
	{
		nod=pq.top().nd;
		used[nod]=1;
		pq.pop();
		for(auto i:v[nod])
		{
			ans[i.st]=min(ans[i.st],ans[nod]+i.nd);
			pq.push({ans[i.st],i.st});
		}
	}
}
int main()
{
	fscanf(fin,"%d%d",&n,&m);
	for(i=1;i<=m;i++)
	{
		fscanf(fin,"%d%d%d",&x,&y,&z);
		v[x].pb({y,z});
		//v[y].pb({x,z});
	}
	for(i=2;i<=n;i++)
		ans[i]=INF;
	dijk(1);
	for(i=2;i<=n;i++)
	{
		if(ans[i]==INF)
			fprintf(fout,"0 ");
		else fprintf(fout,"%d ",ans[i]);
	}
	fprintf(fout,"\n");
	fclose(fin);
	fclose(fout);
}