Pagini recente » Cod sursa (job #387035) | Cod sursa (job #2932795) | Monitorul de evaluare | Cod sursa (job #856517)
Cod sursa(job #856517)
#include<stdio.h>
#include<set>
#include<vector>
#define Nmax 50002
using namespace std;
int n,m;
vector< pair<int,int> > g[Nmax];
multiset< pair< int,pair<int,int> > > h;
int viz[Nmax];
int d[Nmax];
void citire()
{
int i,x,y,c;
scanf("%d %d",&n,&m);
for(i=1;i<=m;++i)
{
scanf("%d %d %d",&x,&y,&c);
g[x].push_back(make_pair(y,c));
}
}
void rezolv()
{
vector< pair<int,int> >::iterator it;
multiset< pair< int,pair<int,int> > >::iterator ith;
int i,x,y,c;
for(it=g[1].begin();it<g[1].end();++it)
{
h.insert(make_pair(it->second,make_pair(1,it->first)));
}
viz[1]=1;
d[1]=0;
for(i=1;i<n;++i)
{
ith=h.begin();
y=ith->second.second;
if(viz[y]==0)
{
x=ith->second.first;
c=ith->first;
viz[y]=1;
d[y]=d[x]+c;
for(it=g[y].begin();it<g[y].end();++it)
if(viz[it->first]==0)
h.insert(make_pair(it->second,make_pair(y,it->first)));
}
h.erase(*h.begin());
}
}
void scrie()
{
int i;
for(i=2;i<=n;++i)
printf("%d ",d[i]);
}
int main()
{
freopen("dijkstra.in","r",stdin);
freopen("dijkstra.out","w",stdout);
citire();
rezolv();
scrie();
fclose(stdin);
fclose(stdout);
return 0;
}