Pagini recente » Cod sursa (job #1829641) | Cod sursa (job #1382054) | Cod sursa (job #891842) | Cod sursa (job #1265553) | Cod sursa (job #2116755)
#include <fstream>
#include <vector>
#include <set>
using namespace std;
ifstream cin("dijkstra.in");
ofstream cout("dijkstra.out");
const int nmax=50000,inf=2000000000;
int n,m;
int a,b,cost;
int l,nod_nou;
struct graf
{
int nod,cost;
};
vector<graf>v[nmax+5];
int best[nmax+5];
bool viz[nmax+5];
struct data
{
int nod;
};
multiset<data>s;
bool operator<(data x,data y)
{
return best[x.nod]<best[y.nod];
}
void DIJ(int nod)
{
l=v[nod].size();
s.erase(s.begin());
for(int i=0;i<l;i++)
{
nod_nou=v[nod][i].nod;
cost=best[nod]+v[nod][i].cost;
if(viz[nod_nou]==1 and cost<best[nod_nou])
{
s.erase({nod_nou});
best[nod_nou]=cost;
s.insert({nod_nou});
}
if(viz[nod_nou]==0)
{
viz[nod_nou]=1;
best[nod_nou]=cost;
s.insert({nod_nou});
}
}
if(s.empty())
return;
data aux=*s.begin();
DIJ(aux.nod);
}
int main()
{
cin>>n>>m;
for(int i=1;i<=m;i++)
{
cin>>a>>b>>cost;
v[a].push_back({b,cost});
}
viz[1]=1;
s.insert({1});
DIJ(1);
for(int i=2;i<=n;i++)
{
if(viz[i]==0)
cout<<"0 ";
else
cout<<best[i]<<" ";
}
return 0;
}