Pagini recente » Cod sursa (job #1376619) | Clasament sa_fac_schema | Cod sursa (job #1044792) | Cod sursa (job #1788708) | Cod sursa (job #2306021)
#include <fstream>
#include <vector>
#include<queue>
#define inf 100000000
#define NMAX 50001
using namespace std;
ifstream fi("dijkstra.in");
ofstream fo("dijkstra.out");
struct NOD{
unsigned short int n;
int d;
};
struct cmp{
bool operator()(const NOD&a, const NOD&b)const{
return(a.d>b.d);
}
};
priority_queue<NOD, vector<NOD>, cmp>pq;
bool sel[NMAX];
int n,m,x,y,c,d[NMAX];
vector<unsigned short int> vv[NMAX], cost[NMAX];
void dijkstra(int s)
{
NOD nod;
int nmin,dn,v;
for(int i=2;i<=n;i++)
d[i]=inf;
nod.n=1;
nod.d=0;
d[1]=0;
pq.push(nod);
while(!pq.empty())
{
nod=pq.top();pq.pop();
nmin=nod.n;
sel[nmin]=true;
for(int j=0;j<vv[nmin].size();j++)
{
v=vv[nmin][j];
if(!sel[v])
{
dn=d[nmin]+cost[nmin][j];
if(dn<d[v])
{
d[v]=dn; nod.n=v; nod.d=dn; pq.push(nod);
}
}
}
}
}
int main()
{
fi>>n>>m;
for(int i=1;i<=m;i++)
{
fi>>x>>y>>c;
vv[x].push_back(y);
cost[x].push_back(c);
}
dijkstra(1);
for(int i=2;i<=n;i++)
if(d[i]==inf)
fo<<0<<" ";
else
fo<<d[i]<<" ";
return 0;
}