Pagini recente » Cod sursa (job #833885) | Cod sursa (job #2160920) | Cod sursa (job #1263337) | Cod sursa (job #2269504) | Cod sursa (job #419924)
Cod sursa(job #419924)
#include <stdio.h>
#include <vector>
#include <queue>
#define IN "dijkstra.in"
#define OUT "dijkstra.out"
#define Lg 50010
#define INF 0x3f3f3f
using namespace std;
struct pct
{
int D,Y;
}p;
vector <pct> Graf[Lg];
int viz[Lg],Drum[Lg];
int N,M,a,Top,Dist;
struct cmp
{
bool operator()(const int &a,const int &b)const
{
return Drum[a]>Drum[b];
}
};
priority_queue< int , vector<int> , cmp> Q;
void Read()
{
scanf ("%d %d",&N,&M);
for (int i=0;i<M;i++)
{
scanf ("%d %d %d",&a,&p.Y,&p.D);
Graf[a].push_back(p);
}
}
void Solve()
{
for (int i=1;i<=N;i++)
Drum[i]=INF;
Q.push(1);
viz[1]=1;
Drum[1]=0;
while (!Q.empty())
{
Top=Q.top();
Q.pop();
viz[Top]=0;
Dist=Drum[Top];
for (int i=0 ; i<Graf[Top].size(); i++)
if (Drum[ Graf[Top][i].Y ] > Dist + Graf[Top][i].D)
{
Drum[ Graf[Top][i].Y ] = Dist + Graf[Top][i].D;
if (!viz[Graf[Top][i].Y])
{
viz[Graf[Top][i].Y]=1;
Q.push(Graf[Top][i].Y);
}
}
}
}
void Write()
{
for (int i=2;i<=N;i++)
printf("%d " , Drum[i]==INF?0:Drum[i]);
printf("\n");
}
int main ()
{
freopen (IN , "r",stdin);
freopen (OUT ,"w",stdout);
Read();
Solve();
Write();
return 0;
}