Pagini recente » Cod sursa (job #2387286) | Cod sursa (job #1642972) | Cod sursa (job #1090374) | Cod sursa (job #1644789) | Cod sursa (job #1119550)
#include <fstream>
#include <algorithm>
#include <queue>
#include <vector>
using namespace std;
const int inf=1 << 30;
int n,m,viz[50001],cost[50001],nod;
vector < pair < int, int> > v[50001];
void drum()
{
int i;
priority_queue < pair <int,int> , vector< pair<int, int> > , greater< pair < int, int > > > r;
r.push(make_pair(0,1));
while(!r.empty())
{
nod=r.top().second;
r.pop();
if(viz[nod]==0) viz[nod]=1;
for(i=0;i<v[nod].size();i++)
{
if(cost[nod]+v[nod][i].second < cost[v[nod][i].first])
{
cost[v[nod][i].first]=cost[nod]+v[nod][i].second;
r.push(make_pair(cost[v[nod][i].first], v[nod][i].first));
}
}
}
}
int main()
{
ifstream mama("dijkstra.in");
ofstream tata("dijkstra.out");
mama>>n>>m;
int i,a,b,c;
for(i=1;i<=m;i++)
{
mama>>a>>b>>c;
v[a].push_back(make_pair(b,c));
}
for(i=2;i<=n;i++)
{
cost[i]=inf;
viz[i]=0;
}
cost[1]=0;
drum();
for(i=2;i<=n;i++)
if (viz[i]==0) tata<<0<<" ";
else tata<<cost[i]<<" ";
return 0;
}