Pagini recente » Cod sursa (job #1610459) | Cod sursa (job #1819166) | Cod sursa (job #638222) | Cod sursa (job #2741761) | Cod sursa (job #392742)
Cod sursa(job #392742)
#include <algorithm>
#include <vector>
#include <queue>
using namespace std;
#define INF 0x3f3f3f3f
#define pb push_back
#define mp make_pair
#define DIM 50005
#define sc second
#define fs first
vector <pair <int,int> > g[DIM];
int dst[DIM],viz[DIM];
int n,m;
struct cmp
{
bool operator () (const int &a,const int &b) const
{
return dst[a]>dst[b];
}
}; priority_queue <int,vector <int>,cmp> q;
void read ()
{
int i,x,y,z;
scanf ("%d%d",&n,&m);
for (i=1; i<=m; ++i)
{
scanf ("%d%d%d",&x,&y,&z);
g[x].pb (mp (y,z));
g[y].pb (mp (x,z));
}
}
void solve ()
{
int nod,i;
memset (dst,INF,sizeof (dst));
for (dst[1]=0, q.push (1); !q.empty (); q.pop ())
{
viz[nod=q.top ()]=0;
for (i=0; i<(int)g[nod].size (); ++i)
if (dst[nod]+g[nod][i].sc<dst[g[nod][i].fs])
{
dst[g[nod][i].fs]=dst[nod]+g[nod][i].sc;
if (!viz[g[nod][i].fs])
{
q.push (g[nod][i].fs);
viz[g[nod][i].fs]=1;
}
}
}
for (i=2; i<=n; ++i)
if (dst[i]==INF)
printf ("0 ");
else
printf ("%d ",dst[i]);
}
int main ()
{
freopen ("dijkstra.in","r",stdin);
freopen ("dijkstra.out","w",stdout);
read ();
solve ();
return 0;
}