Pagini recente » Monitorul de evaluare | Cod sursa (job #3032097) | Cod sursa (job #2947869) | Cod sursa (job #305869) | Cod sursa (job #2102634)
#include <fstream>
#include<list>
using namespace std;
ifstream f("dijkstra.in");
ofstream g("dijkstra.out");
struct nod{int y,c;}aux;
list<nod>v[50002];
list<nod>::iterator it;
int n,m,a,cost[50002];
bool viz[50002];
int main()
{
int i,j,xo;
f>>n>>m;
for(i=1;i<=m;i++)
{
f>>a>>aux.y>>aux.c;
v[a].push_front(aux);
}
viz[1]=1;
for(it=v[1].begin();it!=v[1].end();++it)
cost[(*it).y]=(*it).c;
for(i=1;i<=n-2;++i)
{ /// determin xo cu viz[xo]=0, cost[xo]!=0 minim
for(j=1;j<=n;j++)
if(viz[j]==0 && cost[j]) {xo=j;break;}
for(;j<=n;j++)
if(viz[j]==0 && cost[j] && cost[j]<cost[xo]) xo=j;
viz[xo]=1;
for(it=v[xo].begin();it!=v[xo].end();++it)
if(viz[(*it).y]==0 && (cost[(*it).y]==0 || cost[(*it).y]> cost[xo]+ (*it).c))
cost[(*it).y]=cost[xo]+ (*it).c;
}
for(i=2;i<=n;i++) g<<cost[i]<<' ';
g<<'\n';
f.close();
g.close();
return 0;
}