Pagini recente » Cod sursa (job #2080080) | Cod sursa (job #2453010) | Cod sursa (job #2815925) | Cod sursa (job #271627) | Cod sursa (job #443011)
Cod sursa(job #443011)
#include<cstdio>
#include<vector>
#include<set>
#define beg (*s.begin())
#define mp make_pair
#define pb push_back
using namespace std;
const int N=50001,INF=1000000000;
int n,m,d[N],len[N];
vector < int > g[N],c[N];
set< pair<int,int> > s;
void ini()
{
for( int i=2 ; i<=n ; ++i )
d[i]=INF;
}
void read()
{
int x,y,z;
scanf("%d%d",&n,&m);
for( int i=1 ; i<=m ; ++i )
{
scanf("%d%d%d",&x,&y,&z);
++len[x];
g[x].pb(y);
c[x].pb(z);
}
ini();
}
void check( int cost , int nod )
{
for( int i=0 ; i<len[nod] ; ++i )
if( cost + c[nod][i] < d[ g[nod][i] ] )
{
d[ g[nod][i] ] = cost + c[nod][i];
s.insert( mp( d[ g[nod][i] ] , g[nod][i] ) );
}
}
void parc()
{
s.insert( mp(0,1) );
while( !s.empty() )
{
check( beg.first , beg.second );
s.erase(beg);
}
}
void afis()
{
for( int i=2 ; i<=n ; ++i )
printf("%d ", ( d[i]!=INF ? d[i]:0 ) );
printf("\n");
}
int main()
{
freopen("dijkstra.in","r",stdin);
freopen("dijkstra.out","w",stdout);
read();
parc();
afis();
return 0;
}