Pagini recente » Cod sursa (job #298967) | Cod sursa (job #2003186) | Cod sursa (job #92887) | Cod sursa (job #3120425) | Cod sursa (job #1594604)
#include<fstream>
#include<vector>
#include<queue>
#include<climits>
#define w 50001
#define pp pair<int,int>
#define x first
#define y second
using namespace std;
priority_queue <pp> q;
vector <pp> a[w];
int d[w];
void dij()
{
pp t,r;int i;
while (!q.empty())
{
t=q.top();// t.x = costul, t.y=nodul
q.pop();
for (i=0;i<=a[t.y].size()-1;i++)
{
r=a[t.y][i];
if (d[r.y]>d[t.y]+r.x)
{
d[r.y]=d[t.y]+r.x;
q.push(make_pair(-d[r.y],r.y));
}
}
}
}
int main()
{
ifstream f("dijkstra.in");
ofstream g("dijkstra.out");
int n,i,m,x,y,cost;
f>>n>>m;
for (i=1;i<=m;i++)
{
f>>x>>y>>cost;
a[x].push_back(make_pair(cost,y));
}
for (i=1;i<=n;i++) d[i]=INT_MAX;
d[1]=0;q.push(make_pair(0,1));
dij();
for (i=1;i<=n;i++)
{
if (d[i]==INT_MAX) g<<"0 ";
else g<<d[i]<<" ";
}
g<<'\n';
f.close();
g.close();
return 0;
}