Pagini recente » Cod sursa (job #2522049) | Cod sursa (job #493902) | Cod sursa (job #2175838) | Cod sursa (job #1487896) | Cod sursa (job #419926)
Cod sursa(job #419926)
#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],Grad[Lg];
int N,M,a,Top,Dist,Top2;
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);
Grad[a]++;
}
}
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<Grad[Top]; i++)
{
Top2=Graf[Top][i].Y;
if (Drum[ Top2 ] > Dist + Graf[Top][i].D)
{
Drum[ Top2 ] = Dist + Graf[Top][i].D;
if (!viz[Top2])
{
viz[Top2]=1;
Q.push(Top2);
}
}
}
}
}
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;
}