Pagini recente » Cod sursa (job #186144) | Cod sursa (job #3189875) | Cod sursa (job #1131328) | Cod sursa (job #280690) | Cod sursa (job #407369)
Cod sursa(job #407369)
#include<stdio.h>
#include<ctype.h>
#include<vector>
#include<queue>
using namespace std;
#define mp make_pair
#define fs first
#define sc second
#define pb push_back
#define dim 50050
#define inf 0x3f3f3f3f
#define buf 400000
queue <int> q;
vector <pair<int,int> > v[dim];
int n,m,dst [ dim ],k;
char s[ buf+1];
void r( int &val)
{
while( !isdigit( s[k] ))
if( ++k == buf )
{
k=0;
fread( s, 1, buf ,stdin);
}
val =0 ;
while( isdigit( s[k] ) )
{
val= val*10 + s[k] - '0';
if ( ++k == buf )
{
k=0;
fread ( s,1,buf, stdin);
}
}
}
inline void add(int &x,int &y, int &c)
{
v[x].pb(mp(y,c));
}
inline void read()
{
int x,y,c;
r( n ) ;
r( m ) ;
for(int i=1; i<=m; i++)
{
// scanf("%d%d%d",&x,&y,&c);
r(x);
r(y);
r(c);
add( x, y ,c);
}
}
void solve()
{
int nod;
memset ( dst , inf, sizeof(dst));
dst[ 1 ]=0;
for( q.push (1) ; !q.empty(); q.pop() )
{
nod = q.front ();
for(int i= 0 ; i< v[nod].size(); i ++)
{
// printf("%d %d\n",nod ,dst [ nod ]);
// printf("%d= %d+ %d\n",dst[ v[nod][i].fs ], v[ nod ][ i ].sc , dst[ nod ]);
if ( dst[ v[nod][i].fs ]> v[ nod ][ i ].sc + dst[ nod ])
{
dst[ v[nod][i].fs ] = v[ nod ][ i ].sc + dst[ nod ];
q.push(v[ nod ][ i ].fs) ;
}
}
}
for(int i=2 ;i<=n;i++)
if ( dst[i] != inf)
printf("%d ",dst[i]);
else
printf("0 ");
printf("\n");
}
int main ()
{
freopen("dijkstra.in","r",stdin);
freopen("dijkstra.out","w",stdout);
read();
solve();
return 0;
}